从asp.net mvc中的formcollection获取复选框的值

时间:2013-07-09 09:17:03

标签: asp.net asp.net-mvc-4 razor checkbox formcollection

我在这里查看了一些主题,但我仍然遇到从复选框中获取值的问题。

模型的一部分:

public Dictionary<Language, bool> TargetLanguages { get; set; }

观点的一部分:

    <div class="editor-label">
        <label for="TargetLanguages">select target languages</label>
    </div>
    <div class="editor-field">
        <form>
            @foreach (var item in Model.TargetLanguages)
            {                    
                @Html.CheckBox("TargetLanguages["+item.Key.Name+"]", item.Value)
                @item.Key.Name
            }
        </form>
    </div>

控制器的一部分:

    [HttpPost, ActionName("AddDictionary")]
    public ActionResult AddDictionary(FormCollection collection)
    {
     ...
    }

问题是我在FormCollection中没有得到任何TargetLanguages的痕迹。我试过CheckBoxFor,但没有帮助。我也尝试手动写入复选框。

编辑:好的,我刚注意到问题所在。我搞砸了标记,这就是我无法从FormCollection获取数据的原因。

2 个答案:

答案 0 :(得分:2)

创建所有具有相同名称的复选框。在这个示例中,我使用的是'SelectedTargetLanguages'。

@using (Html.BeginForm())
{
    foreach (var item in Model.TargetLanguages)
    {
        <label>
            @Html.CheckBoxFor(m => m.SelectedTargetLanguages, item.value)
            @item.KeyName
        </label>
    }
    <br/>
    @Html.SubmitButton("Actualizar listado")
}

然后,在您的操作中,参数必须是这样的字符串数组:

public ActionResult AddDictionary(string[] selectedTargetLanguages)

请注意,参数的名称与复选框的名称相同。 (它甚至可以使用不同的外壳)。

您应该使用这样的显式参数,而不是通用的FormCollection。无论如何,如果你使用FormCollection,你shpuld也会收到数组。

答案 1 :(得分:1)

我以前曾问过同样的问题。请检查以下链接

MVC3 @Html.RadioButtonfor Pass data from view to controller

MVC3 @html.radiobuttonfor

我认为这可能会对你有所帮助。