使用Blazor将输入文本动态绑定到类/对象属性

问题描述 投票:0回答:1

我正在尝试使用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内部的值不会更改。我猜想我要完全解决这个问题,但似乎无法弄清楚如何使它工作,也找不到任何示例来做到这一点。

c# razor data-binding components blazor
1个回答
0
投票
@foreach (var propertyInfo in nfo)
{
    <input type="text" class="form-control"      
    value="@propertyInfo.GetValue(SCustomer)" 
    @onchange="@((ChangeEventArgs __e) =>
       propertyInfo.SetValue(SCustomer, __e.Value.ToString()))" />
}
© www.soinside.com 2019 - 2024. All rights reserved.