ASP.NET MVC绑定到字典

我试图在MVC中绑定字典值。

在行动中我有:

model.Params = new Dictionary<string, string>(); model.Params.Add("Value1", "1"); model.Params.Add("Value2", "2"); model.Params.Add("Value3", "3"); 

并在视图内有:

 @foreach (KeyValuePair<string, string> kvp in Model.Params) { <tr> <td> <input type="hidden" name="Params.Key" value="@kvp.Key" /> @Html.TextBox("Params[" + kvp.Key + "]") </td> </tr> } 

但是视图不显示初始值,当表单提交时, Params属性为空?

你应该看看从斯科特hanselman这个职位: http : //www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx

默认的联编程序只是了解格式的字典:

 params[0].key = kvp.key params[0].value = kvp.value 

参数的索引必须是连续的,从0开始,没有任何间隙。 目前的帮助者不支持这个,所以你应该自己创build表单input字段。

你当然可以实现你自己的活页夹,就像这样: http : //siphon9.net/loune/2009/12/a-intuitive-dictionary-model-binder-for-asp-net-mvc/

在ASP.NET MVC 4中,默认的模型绑定器将使用典型的字典索引器语法property[key]来绑定字典。

如果在模型中有Dictionary<string, string> ,现在可以使用以下标记直接绑定到它:

 <input type="hidden" name="MyDictionary[MyKey]" value="MyValue" /> 

例如,如果要使用一组checkbox来select字典元素的子集并将其绑定回相同的属性,则可以执行以下操作:

 @foreach(var kvp in Model.MyDictionary) { <input type="checkbox" name="@("MyDictionary[" + kvp.Key + "]")" value="@kvp.Value" /> } 

build立在@ AntP的答案,有一个更less的详细的方式,让MVC做更多的工作(至less与TextBoxFor()上一个Dictionary<string, string> – 我还没有尝试过Dictionary<xxx, bool> CheckBoxFor() Dictionary<xxx, bool> ):

 @foreach(var kvp in Model.MyDictionary) { @Html.Label(kvp.Key); @Html.TextBoxFor(m => m.MyDictionary[kvp.Key]); }