我刚刚注意到Html.CheckBox("foo")生成 2 个输入而不是 1 个,有人知道为什么会这样吗?
Html.CheckBox("foo")
<input id="foo" name="foo" type="checkbox" value="true" /> <input name="foo" type="hidden" value="false" />
如果未选中复选框,则不提交表单字段。这就是为什么隐藏字段中总是存在错误值的原因。如果您未选中复选框,表单仍将具有来自隐藏字段的值。这就是 ASP.NET MVC 处理复选框值的方式。
如果您想确认这一点,请在表单上放置一个复选框,而不是使用 Html.Hidden,而是使用<input type="checkbox" name="MyTestCheckboxValue"></input>. 不选中复选框,提交表单并查看服务器端发布的请求值。您会看到没有复选框值。如果您有隐藏字段,它将包含带有值的MyTestCheckboxValue条目。false
<input type="checkbox" name="MyTestCheckboxValue"></input>
MyTestCheckboxValue
false