我正在使用ASP.Net MVC4(Razor)。我有以下代码:
Dictionary<string, OccasionObject> occasionList = new Dictionary<string, OccasionObject>()
键是场合类别的字符串。 occassion对象有3个属性:isAttending(bool)
,ID(int)
和Name(string)
在我的cshtml文件中,我执行以下操作:
@foreach(string s in model.occasionList .Keys)
{
foreach(var o in model.occasionList .Keys[s])
{
@Html.CheckBoxFor(m=>m.occasionList[s].FirstOrDefault(ev=>ev.ID == o.ID).isAttending);
}
}
这完全绑定了加载,我在SQL中手动检查的复选框。但是,当我将此模型POST回服务器时,occasionList字典为空。该模型绑定正常,因为我仍然返回模型中的其他属性。
有什么想法吗?
谢谢, DOM
答案 0 :(得分:3)
模型绑定器将字典视为集合,如果您将字典想象为IEnumerable<KeyValuePair<string, IEnumerable<OccasionObject>>>
,则很容易理解为什么它不受约束。
@Html.CheckBoxFor(m=>m.occasionList[s].FirstOrDefault(ev=>ev.ID == o.ID).isAttending);
产生的是:
<input type="checkbox" name="occasionList[0].Value.isAttending" ../>
所以Key丢失了。
试试这个:
@Html.Hidden("occasionList.Index", s)
@Html.CheckBoxFor(m=>m.occasionList[s].FirstOrDefault(ev=>ev.ID == o.ID).isAttending);
@Html.HiddenFor(m=>m.occasionList[s].Key)
第一个隐藏是因为您可能会使索引无序,and explicitly providing an ".Index"是在这种情况下使模型绑定器工作的唯一方法。
Here's另一个描述模型绑定到集合的资源。