我正在尝试使用Blazor为类内的属性构建输入字段的动态列表,但无法弄清楚如何将输入框的内容绑定/链接到类的属性。 (该类可以具有大量的公共道具,不仅像下面的示例中的Name和Description一样,而且它们的类型也不总是“ string”)
让我说我有这个课程/模型:
public class customer{
public string Name { get; set; }
public int Age { get; set; }
public string Description { get; set; }
}
我有这个强大的组件(updateC.razor):
@inherits CLogic
@if (nfo != null)
{
@foreach (var obj in nfo)
{
<input type="text" class="form-control"
[email protected]().GetProperty(obj.ToString())/>
}
}
最后是Clogic:
public class Clogic: ComponentBase{
[Parameter]
public Customer SCustomer { get; set; } = new Customer();
[Parameter]
public PropertyInfo[] nfo { get; set; }
protected override void OnAfterRender(bool firstRender)
{
if (firstRender)
{
nfo = SCustomer.GetType().GetProperties();
StateHasChanged();
}
}
}
这是假定将在每个输入字段中所做的更改绑定到SCustomer当前实例中的正确属性(当进行输入时,应该更新类/对象的正确属性)。这不起作用,完成输入后,SCustomer内部的值不会更改。我猜想我要完全解决这个问题,但似乎无法弄清楚如何使它工作,也找不到任何示例来做到这一点。
@foreach (var propertyInfo in nfo)
{
<input type="text" class="form-control"
value="@propertyInfo.GetValue(SCustomer)"
@onchange="@((ChangeEventArgs __e) =>
propertyInfo.SetValue(SCustomer, __e.Value.ToString()))" />
}