【发布时间】:2009-06-07 16:09:10
【问题描述】:
我需要'绑定'
Dictionary<MyType, bool>
到 asp.net mvc 中的复选框列表。
我对如何做到这一点感到困惑。谁能帮帮我?
【问题讨论】:
标签: asp.net-mvc binding dictionary checkboxlist
我需要'绑定'
Dictionary<MyType, bool>
到 asp.net mvc 中的复选框列表。
我对如何做到这一点感到困惑。谁能帮帮我?
【问题讨论】:
标签: asp.net-mvc binding dictionary checkboxlist
假设 MyType 有一个名为 Name 的字符串属性,您将从中获取复选框的名称。请注意,我已将其更改为以MyType 开头,以便我们可以在服务器上轻松区分它。如果您有其他方法可以确定哪些字段是复选框,则可能不需要此步骤。
<% foreach (var pair in model.ChecboxDictionary) { %>
<%= Html.CheckBox( "MyType." + pair.Key.Name, pair.Value ) %>
<% } %>
控制器(这使用 FormParameters,但您也可以尝试将带有前缀“MyType”的模型直接绑定到Dictionary<string,bool>,然后进行翻译。
public ActionResult MyAction( FormParameters form )
{
var dict = ... fill dictionary with original values...
foreach (var key in dict.Keys)
{
if (!form.Keys.Contains( "MyType." + key.Name ))
{
dict[key] = false;
}
}
foreach (var key in form.Keys.Where( k => k.StartsWith("MyType.")))
{
var value = form[key].Contains("on"); // just to be safe
// create or retrieve the MyType object that goes with the key
var myType = dict.Keys.Where( k => k.Name == key ).Single();
dict[myType] = value;
}
...
}
您还可以在客户端使用一些 javascript,在提交之前为每个“未选中”复选框添加 name=off 参数,这样就无需填写原始字典,因为您将能够直接派生所有字典元素的值。
【讨论】: