基本上我有一个字符串集合,我想将它们渲染为页面上的复选框。为此,我写了这段代码:
@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不会将其映射到数组中。
我确定答案非常简单,但我如何提交我的复选框值集合?
答案 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">
感到惊讶的是我花了很长时间。