绑定到 Blazor 中的 ExpandoObject
Binding to a ExpandoObject in Blazor
我构建了一个 class,它有一个动态的属性列表(例如颜色、大小、重量等),其内容在编译时是未知的,所以我使用了 ExpandoObject
我努力的地方是让 Blazor 绑定到对象的值属性,例如
@foreach (var option in (IDictionary<string, object>)selectedProduct.Properties)
{
<div class="col-sm">
<input type="text" placeholder="@option.Key" @bind="option.Value"/>
</div>
}
然而,编译时自动生成代码会导致错误:- 'KeyValuePair<string, object>.Value' cannot be assigned to
有没有人成功绑定到 ExpandoObject(和子属性?)
这与 ExpandoObject 没有直接关系。
当您遍历字典时,您会返回 不可变 KeyValuePair 项。
您收到一个错误,因为 @bind="option.Value"
编译为要分配给 option.Value
的代码。
由于元组和匿名类型都是不可变的,我认为您必须为此编写 <Label, Value>
class。
感谢 Henk 的回答,我能够修改我的代码以支持 ExpandoObject
@foreach (var option in (IDictionary<string, object>)selectedProduct.Properties)
{
<div class="col-sm">
<input type="text" placeholder="@option.Key" @onchange="@((ChangeEventArgs __e) => ((IDictionary<string, object>)selectedProduct.Properties)[option.Key] = (object)__e.Value.ToString())"/>
</div>
}
它看起来更难看,但很管用
我构建了一个 class,它有一个动态的属性列表(例如颜色、大小、重量等),其内容在编译时是未知的,所以我使用了 ExpandoObject
我努力的地方是让 Blazor 绑定到对象的值属性,例如
@foreach (var option in (IDictionary<string, object>)selectedProduct.Properties)
{
<div class="col-sm">
<input type="text" placeholder="@option.Key" @bind="option.Value"/>
</div>
}
然而,编译时自动生成代码会导致错误:- 'KeyValuePair<string, object>.Value' cannot be assigned to
有没有人成功绑定到 ExpandoObject(和子属性?)
这与 ExpandoObject 没有直接关系。
当您遍历字典时,您会返回 不可变 KeyValuePair 项。
您收到一个错误,因为 @bind="option.Value"
编译为要分配给 option.Value
的代码。
由于元组和匿名类型都是不可变的,我认为您必须为此编写 <Label, Value>
class。
感谢 Henk 的回答,我能够修改我的代码以支持 ExpandoObject
@foreach (var option in (IDictionary<string, object>)selectedProduct.Properties)
{
<div class="col-sm">
<input type="text" placeholder="@option.Key" @onchange="@((ChangeEventArgs __e) => ((IDictionary<string, object>)selectedProduct.Properties)[option.Key] = (object)__e.Value.ToString())"/>
</div>
}
它看起来更难看,但很管用