如何使用ASP.NET MVC将字典绑定到一组复选框?

时间:2009-06-07 16:09:10

标签: asp.net-mvc binding dictionary checkboxlist

我需要'绑定'

Dictionary<MyType, bool> 

到asp.net mvc中的复选框列表。

我对如何实现这一点很困惑。有谁可以帮助我?

1 个答案:

答案 0 :(得分:3)

假设MyType有一个名为Name的字符串属性,您将从中获取该复选框的名称。请注意,我已将其更改为以MyType为前缀,以便我们可以在服务器上轻松区分它。如果您有其他方法可以确定哪些字段是复选框,则可能不需要此步骤。

<% foreach (var pair in model.ChecboxDictionary) { %>
   <%= Html.CheckBox( "MyType." + pair.Key.Name, pair.Value ) %>
<% } %>

Controller(这使用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个参数,这样可以避免填写原始字典的需要,因为您将能够直接导出所有字典元素的值。