我正在尝试完成类似于FormBuilder的功能,在那里我们动态地添加控件和验证。
通常,在MudBlazor或Blazor中,我们必须使用C#模型来绑定控件。
因此,我决定将ExpandoObject与动态添加的属性一起使用OnInitialized方法与MudBlazor控件绑定,如下所示
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表达式作为动态分派操作的参数,除非首先将其转换为委托或表达式树类型。
当使用第二个"object“方法运行时,当值被更改/输入时,它会在运行时产生错误。
转换为未实现的System.Object类型
发布于 2022-02-27 10:06:31
上个月,我正在做一个项目,在这个项目中,我得到了一个包含未知数量的表和每个表的数据集,因为每个表的列和类型都是未知的,我的目标是使每个表及其列都是可编辑的,我就是这样实现的。
这是html部分
<div>
<div>@($"{Fields["FirstName"]} {Fields["LastName"]}")</div>
@foreach (var field in Fields)
{
<div>
<input type="text" @bind=@Fields[field.Key] @bind:event="oninput"/>
</div>
}
</div>下面是代码
@code {
private Dictionary<string, string> Fields;
protected override void OnInitialized()
{
// Intialize dictionary
Fields = new();
// Initialize input fields with some default value
Fields.Add("FirstName", "first");
Fields.Add("LastName", "last");
}
}如果这对您有帮助的话,我只是提出了一个想法,我创建了一个自定义输入控件,它根据数据类型处理字符串、数字和bool输入值。
没有使用MudBlazor的经验,但我认为自定义绑定转换器可以用于字符串和数字数据类型。
<MudTextField Converter="@StringConverter" Label="First name" @bind-Value=@Fields["FirstName"] />
<MudTextField Converter="@StringConverter" Label="Last name" @bind-Value=@Fields["LastName"] />
<div>@($"{Fields["FirstName"]} {Fields["LastName"]}")</div>
@code {
private Dictionary<string, object> Fields;
protected override void OnInitialized()
{
// Intialize dictionary
Fields = new();
// Initialize input fields with some default value
Fields.Add("FirstName", "first");
Fields.Add("LastName", "last");
}
Converter<object> StringConverter = new Converter<object>
{
SetFunc = value => value.ToString(),
GetFunc = text => text.ToString(),
};
}https://stackoverflow.com/questions/71283001
复制相似问题