代码之家  ›  专栏  ›  技术社区  ›  Arnis Lapsa

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

  •  2
  • Arnis Lapsa  · 技术社区  · 15 年前

    Dictionary<MyType, bool> 
    

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

    我对如何做到这一点感到困惑。有人能帮我吗?

    1 回复  |  直到 15 年前
        1
  •  3
  •   tvanfosson    15 年前

    假设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;
        }
    
        ...
    }
    

    name=off 提交之前,每个“未选中”复选框的参数,这将避免填写原始字典的需要,因为您将能够直接派生所有字典元素的值。