我正在尝试将IList绑定到Html.CheckBoxFor。
当我第一次尝试和调查时,我发现KeyValuePair不会因为它的私有性而完成这项工作,所以我做了一个MyKeyValuePair。所以现在在我的模型中我有:
public GameCreation()
{
Orientation = new List<MyKeyValuePair>();
foreach (var v in Enum.GetNames(typeof(DeveloperPortalMVCApp.Models.Orientation)))
{
Orientation.Add(new MyKeyValuePair { Name = v });
}
}
public MyKeyValuePair MyProperty { get; set; }
public ObservableCollection<MyKeyValuePair> Orientation { get; set; }
我的观点是:
@Html.CheckBoxFor(model => model.MyProperty.Value)
@foreach (var f in Model.Orientation)
{
@Html.CheckBoxFor(model => f.Value)
}
问题是IList中的那些MyKeyValuePair不会更新它们的值,但MyProperty会。我错过了什么?
答案 0 :(得分:1)
使用
@Html.CheckBoxFor(model => model.MyProperty.Value)
@for (var i=0; i < Model.Orientation.Count; i++)
{
@Html.CheckBoxFor(model => Model.Orientation[i].Value)
}
要特别注意索引器,如果不对复选框编制索引,那么最终会出现一堆带有冲突名称和/或ID的复选框。模型绑定器可能尝试将其绑定为单个项目,而不是列表。
如果你使用上面的代码示例,你会得到类似的东西:
<input type="checkbox" name="Orientation[0].Value" />
<input type="checkbox" name="Orientation[1].Value" />
<input type="checkbox" name="Orientation[2].Value" />
其中,模型绑定器可以解释为列表。 如果你没有在CheckBoxFor中使用索引器,那么你会得到类似的东西:
<input type="checkbox" name="Orientation.Value" />
<input type="checkbox" name="Orientation.Value" />
<input type="checkbox" name="Orientation.Value" />
模型绑定器将无法列出此列表。