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]); }