这是CheckBox HtmlHelper的意外行为吗?

时间:2009-04-24 19:57:30

标签: asp.net-mvc

我的视图页面包含一个按示例搜索的表单,其中包含以下复选框代码:

<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 =“”的复选框类型的输入。

感谢任何想法。

1 个答案:

答案 0 :(得分:3)

是的,这是正确的。

复选框的语义与您的想法略有不同;而不是发布一个指示其已选中/未选中状态的值,一个选中的复选框会发布其“值”属性中的任何内容,而未选中的复选框则不会发布任何内容。

由于还有一个具有相同名称的隐藏字段,如果您调试表单提交,您会发现选中的复选框的值为'true,false',而未选中的复选框的值为'false'

您可以通过测试复选框是否包含“true”来确定是否选中了复选框。

public ActionResult(FormCollection form)
{
   bool checked = form["checkbox_id"].ToString().Contains('true');
}