在MVC3中编辑字典

时间:2012-04-29 09:01:01

标签: c# asp.net-mvc-3 dictionary

我有一个包含字典的视图模型“MyClass”:

 Dictionary<string, bool> columns {get; set;}

它有键和值

 columns.Add("Name", true);
 columns.Add("Type", true);

现在,我想让用户编辑MyClass及其字典。

对于每个键我想显示其键并启用以检查\取消其值(true \ false),以便输入的名称将是正确的名称进行编辑。由于字典有很多键,我需要用“foreach”或“for”来表示。

我该怎么做?

3 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

你需要在你的视图中写下这样的东西

@using (Html.BeginForm()) {

    <fieldset>
        <legend>MyClassViewModel</legend>
        @foreach (var item in Model.Columns){
            @Html.Label(item.Key)
            @Html.CheckBox(item.Key, item.Value)
        }
        <p>
            <input type="submit" value="Save" />
        </p>
    </fieldset>
}

在这种情况下,您的视图必须绑定到模型

@model MvcDemoApp.Models.MyClassViewModel

或作为替代

    @foreach (var item in Model.Columns)
    {
        @item.Key 
        <input type="checkbox" id="@item.Key" checked="@item.Value" />
        <input type="hidden" value="@item.Value" />
        <br />
    }

或尝试使用社区

的CheckBoxList自定义帮助程序

http://weblogs.asp.net/gunnarpeipman/archive/2011/05/05/asp-net-mvc-implementing-checkboxlist.aspx

http://www.codeproject.com/Articles/292050/MVC3-Html-CheckBoxList-custom-extension

答案 2 :(得分:0)

在你的情况下你需要这样的东西,默认的绑定器要理解name=""格式:

<input type="checkbox" name="columns[0].Value" value="Key0 string value" />
<input type="checkbox" name="columns[1].Value" value="Key1 string value" />

不幸的是,默认帮助程序并不完全支持这一点,因此您必须明确地编写name=""。类似的东西:

@Html.CheckBox("columns[" + i + "].Value", new { value = columns[i].Key });

this博客文章中了解有关这类绑定的更多信息。