这是我的HTML:
<ul id="limitations" name="limitations" class="dropdown-menu">
<li>
<div class="checkbox checkbox-default">
<input type="checkbox" id="limitation-checkbox-0" value="8" name="limitations[0]" data-name="ALS ">
<label for="limitation-checkbox-0" style="color:black">ALS </label>
</div>
</li>
<li>
<div class="checkbox checkbox-primary">
<input type="checkbox" id="limitation-checkbox-1" value="10" name="limitations[1]" data-name="Arthrogryposis Multiplex Congenita (AMC) & Amyoplasia">
<label for="limitation-checkbox-1" style="color:black">Arthrogryposis Multiplex Congenita (AMC) & Amyoplasia</label>
</div>
</li>
<li>
<div class="checkbox checkbox-success">
<input type="checkbox" id="limitation-checkbox-2" value="2" name="limitations[2]" data-name="Cerebral Palsy (CP), (GMFS)">
<label for="limitation-checkbox-2" style="color:black">Cerebral Palsy (CP), (GMFS)</label>
</div>
</li>
<li>
<div class="checkbox checkbox-info">
<input type="checkbox" id="limitation-checkbox-3" value="4" name="limitations[3]" data-name="Hearing impairment deafness or hard of hearing">
<label for="limitation-checkbox-3" style="color:black">Hearing impairment deafness or hard of hearing</label>
</div>
</li>
... MORE <li> ...
</ul>
当我发布表单时,List<int> limitations
的模型绑定器只有在选中复选框时才有效,如果数组中有间隙,则间隙后面的所有项都没有绑定。
例如:
考虑检查第一个(8)和第三个(10)复选框。
绑定到List<int> limitations
的值为[8]。
或者,如果选中了所有复选框,则List<int> limitations
将绑定一个空列表。
我尝试将name
的复选框name="limitations[0..n]"
更改为name="limitations[]"
,但这会导致ASP.NET完全忽略这些值。
这些事情没有标准吗?!
我知道如何通过javascript操作来克服这个问题,但我真的不愿意为这样一个微不足道的案例找到那条尴尬的路线。
使用asp.net核心1.0.0和.Net4.6.1
答案 0 :(得分:1)
ASP.Net模型绑定没有改变ASP.Net 4和ASP.Net Core之间的这种行为。 The answer here仍有效。
您的命名约定有点偏差。如果您有多个具有相同名称的<input type="checkbox"...>
,它应该自动序列化为ASP.Net的模型绑定可以容纳的数组。
尝试在整个输入中使用name="limitations"
代替name="limitations[0]"
,看看它是否按预期工作。