MVC 5:模型中的字典绑定到视图中的一系列复选框中?

人气:75 发布:2023-01-03 标签: asp.net-mvc dictionary model-binding

问题描述

当我将模型发布到控制器以保存它时,控制器收到一个空词典。

哪里出了问题?要使绑定起作用,有什么特殊操作吗?

我的模型具有以下属性:

public Dictionary<int, bool> DictionaryTest { get; set; }

我的控制器在调用视图之前填充了一些数据:

mymodel.DictionaryTest = new Dictionary<int, bool> { { 0, false }, { 1, true }, { 2, false } };

我的视图使用以下代码正确显示它:

@Html.CheckBoxFor(m_ => m_.DictionaryTest[0], new { @class = "form-control" })
@Html.CheckBoxFor(m_ => m_.DictionaryTest[1], new { @class = "form-control" })
@Html.CheckBoxFor(m_ => m_.DictionaryTest[2], new { @class = "form-control" })

非常感谢

推荐答案

要绑定词典,您需要有如下POST值:DictionaryProperty[N].KeyDictionaryProperty[N].Value。因此,您的Razor代码需要如下所示:

@Html.HiddenFor(m_ => m_.DictionaryTest[0].Key)
@Html.CheckBoxFor(m_ => m_.DictionaryTest[0].Value, new { @class = "form-control" })

@Html.HiddenFor(m_ => m_.DictionaryTest[1].Key)
@Html.CheckBoxFor(m_ => m_.DictionaryTest[1].Value, new { @class = "form-control" })

@Html.HiddenFor(m_ => m_.DictionaryTest[2].Key)
@Html.CheckBoxFor(m_ => m_.DictionaryTest[2].Value, new { @class = "form-control" })
但是,如果您的键是整数,那么使用字典就太过分了。只要用一个简单的清单就可以了。然后,您的Razor代码将按原样工作。

19