我的视图页面包含一个按示例搜索的表单,其中包含以下复选框代码:
<td>
<label for="HasProcessErrors">Has Errors:</label>
<%= Html.CheckBox("HasProcessErrors", crit.HasProcessErrors) %>
</td>
crit对象HasProcessErrors属性是一个布尔值,其初始值为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 =“”的复选框类型的输入。
感谢任何想法。
答案 0 :(得分:3)
是的,这是正确的。
复选框的语义与您的想法略有不同;而不是发布一个指示其已选中/未选中状态的值,一个选中的复选框会发布其“值”属性中的任何内容,而未选中的复选框则不会发布任何内容。
由于还有一个具有相同名称的隐藏字段,如果您调试表单提交,您会发现选中的复选框的值为'true,false',而未选中的复选框的值为'false'
您可以通过测试复选框是否包含“true”来确定是否选中了复选框。
public ActionResult(FormCollection form) { bool checked = form["checkbox_id"].ToString().Contains('true'); }