我的 View 页面包含一个示例搜索表单,其中包含以下复选框代码:
<td>
<label for="HasProcessErrors">Has Errors:</label>
<%= Html.CheckBox("HasProcessErrors", crit.HasProcessErrors) %>
</td>
crit 对象的 HasProcessErrors 属性是一个 bool 值,其初始值为 false。当我查看渲染页面的源代码时,我看到助手已生成以下 HTML:
<td>
<label for="HasProcessErrors">Has Errors:</label>
<input id="HasProcessErrors" name="HasProcessErrors" type="checkbox" value="true" /><input name="HasProcessErrors" type="hidden" value="false" />
</td>
我在这里是否错误地使用了 CheckBox 帮助程序,或者发生了什么奇怪的事情?看起来它应该生成一个带有checked =“”的复选框类型的输入。
感谢您的任何想法。
最佳答案
是的,这是正确的。
复选框的语义与您想象的有些不同;选中的复选框不会发布指示其选中/未选中状态的值,而是发布其“value”属性中的任何内容,而未选中的复选框则不发布任何内容。
由于还有一个同名的隐藏字段,如果您调试表单提交,您会发现选中的复选框的值为“true,false”,而未选中的复选框的值为“false”
您可以通过测试复选框是否包含“true”来确定是否选中该复选框。
public ActionResult(FormCollection form) { bool checked = form["checkbox_id"].ToString().Contains('true'); }
关于asp.net-mvc - 这是 CheckBox HtmlHelper 的意外行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/787332/