在取消选中第一个复选框时,在MVC中提交一个复选框集合将产生null

时间:2013-12-12 15:00:13

标签: asp.net-mvc

基本上我有一个字符串集合,我想将它们渲染为页面上的复选框。为此,我写了这段代码:

@for (var i=0; i< Model.AvailableCats.Length; i++)
{
    <input type="checkbox" name="Cats[@i]" value="@Model.Cats[i]" @(Model.Cats.Contains(Model.AvailableCats[i]) ? "checked=checked" : "") /> @Model.AvailableCats[i]
}

这会产生类似

的复选框
<input type="checkbox" checked="checked" value="Bengal" name="Cats[0]">
<input type="checkbox" checked="checked" value="Moggy" name="Cats[1]">

提交时,如果两者都被选中,或者第一项被选中,但是如果仅选中第二项,那么它只能提交Cats [1]并且MVC不会将其映射到数组中。

我确定答案非常简单,但我如何提交我的复选框值集合?

2 个答案:

答案 0 :(得分:1)

这就是为什么Html.Checkbox实际上在复选框输入中添加了隐藏的输入元素 。复选框只有在选中时才会提交一个值,因此添加一个具有相同名称的隐藏输入意味着如果未选中它,某些将被提交,即使它只是一个空字符串。

<input type="checkbox" checked="checked" value="Bengal" name="Cats[0]">
<input type="hidden" name="Cats[0]" value="">
<input type="checkbox" checked="checked" value="Moggy" name="Cats[1]">
<input type="hidden" name="Cats[1]" value="">

答案 1 :(得分:0)

好的答案很简单,每个人都有相同的名称属性。它不必是唯一的,如果提交了多个,MVC会将其绑定到一个集合中。

<input type="checkbox" checked="checked" value="Bengal" name="Cats">
<input type="checkbox" checked="checked" value="Moggy" name="Cats">

感到惊讶的是我花了很长时间。