我正在尝试完成类似于 Angular FormBuilder 的功能,我们在其中动态添加控件和验证。
在 MudBlazor 或一般的 Blazor 中,我们必须使用 C# Model 来绑定 Controls。
所以我决定使用 ExpandoObject 和动态添加的属性来绑定 MudBlazor 控件,OnInitialized
方法如下
dynamic FormModel = new ExpandoObject();
protected override void OnInitialized()
{
FormModel.FirstName = null;
FormModel.LastName = null;
FormModel.Age = 0;
//Or with Dictionary
((IDictionary<string, object>)FormModel).Add("FirstName", "");
((IDictionary<string, object>)FormModel).Add("LastName", "");
((IDictionary<string, object>)FormModel).Add("Age", 0);
}
在 HTML 中使用 MudBlazor 文本框
<MudTextField Label="First name" @bind-Value=FormModel.FirstName />
使用第一种方法编译时,会出现以下错误
如果不先将 lambda 表达式转换为委托或表达式树类型,则无法将 lambda 表达式用作动态分派操作的参数。
在使用第二种“对象”方法运行时,它会在运行时出现错误,当值被更改/输入时。
未实现到类型 System.Object 的转换