Blazor 将数据绑定到集合?
Blazor bind data to collection?
我正在尝试以编程方式使用 Blazor 生成表单,但我 运行 遇到了一个问题,我需要将 InputText 值绑定到集合的成员,例如:
@foreach (var prop in formProperties)
{
<InputText id=@prop.Name @bind-Value="form.Responses[prop.Name]" />
}
但是,我得到以下异常:
System.ArgumentException: The provided expression contains a InstanceMethodCallExpression1 which is not supported. FieldIdentifier only supports simple member accessors (fields, properties) of an object.
是否可以将输入绑定到某种集合?
遗憾的是,您目前无法将 <InputText/>
组件用于更复杂的访问器。
但是,如果您不介意处理您自己的 validation/notification 代码,您可以通过以下方式推出自己的代码:
- 将
<InputText/>
更改为 <input/>
- 使用
@bind
代替@bind-Value
使用您的代码:
@foreach (var prop in formProperties)
{
<input id=@prop.Name @bind="form.Responses[prop.Name]" />
}
同样,您将丢失更改通知、验证以及与 EditForm 和 EditContext 的所有连接。
您也可以按照@dennis1679 建议的路线,创建一个子组件。我很好奇 Chained Binding 与顶级 form/model 验证的集成在实践中会是什么样子。我还没玩过。
仅供参考,我进行了快速搜索,并没有在 github 中看到问题(可能是一个功能),但是当我找到它时,我会更新它。
运行 进入一个类似的问题,我正在尝试基于属性字典构建 table,我遇到了来自史蒂夫的 this reply。
基本上你可以做的是引入一个新的类型,例如
public class FormResponse
{
public string Value { get; set;
}
假设您现在在 form
对象上创建 FormResponse
的字典,然后您可以这样做:
@foreach (var prop in formProperties)
{
<InputText id="@prop.Name" @bind-Value="form.Responses[prop.Name].Value" />
}
这可以说比使用链式绑定创建新组件更直接。
我正在尝试以编程方式使用 Blazor 生成表单,但我 运行 遇到了一个问题,我需要将 InputText 值绑定到集合的成员,例如:
@foreach (var prop in formProperties)
{
<InputText id=@prop.Name @bind-Value="form.Responses[prop.Name]" />
}
但是,我得到以下异常:
System.ArgumentException: The provided expression contains a InstanceMethodCallExpression1 which is not supported. FieldIdentifier only supports simple member accessors (fields, properties) of an object.
是否可以将输入绑定到某种集合?
遗憾的是,您目前无法将 <InputText/>
组件用于更复杂的访问器。
但是,如果您不介意处理您自己的 validation/notification 代码,您可以通过以下方式推出自己的代码:
- 将
<InputText/>
更改为<input/>
- 使用
@bind
代替@bind-Value
使用您的代码:
@foreach (var prop in formProperties)
{
<input id=@prop.Name @bind="form.Responses[prop.Name]" />
}
同样,您将丢失更改通知、验证以及与 EditForm 和 EditContext 的所有连接。
您也可以按照@dennis1679 建议的路线,创建一个子组件。我很好奇 Chained Binding 与顶级 form/model 验证的集成在实践中会是什么样子。我还没玩过。
仅供参考,我进行了快速搜索,并没有在 github 中看到问题(可能是一个功能),但是当我找到它时,我会更新它。
运行 进入一个类似的问题,我正在尝试基于属性字典构建 table,我遇到了来自史蒂夫的 this reply。
基本上你可以做的是引入一个新的类型,例如
public class FormResponse
{
public string Value { get; set;
}
假设您现在在 form
对象上创建 FormResponse
的字典,然后您可以这样做:
@foreach (var prop in formProperties)
{
<InputText id="@prop.Name" @bind-Value="form.Responses[prop.Name].Value" />
}
这可以说比使用链式绑定创建新组件更直接。