MVC模型没有绑定到字典

我正在使用ASP.Net MVC4(Razor)。 我有以下代码:

Dictionary occasionList = new Dictionary()

关键是一个场合类别的字符串。 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

模型绑定器将字典视为集合,如果您将字典想象为IEnumerable>> ,则很容易理解它为什么不绑定。

什么@Html.CheckBoxFor(m=>m.occasionList[s].FirstOrDefault(ev=>ev.ID == o.ID).isAttending); 正在产生的是:

所以钥匙丢失了。

试试这个:

 @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) 

第一个隐藏是因为您可能会使索引无序, 并且明确提供“.Index”是使模型绑定器在这些情况下工作的唯一方法。

是描述模型绑定到集合另一种资源。