2009-04-24 43 views
2

我的视图页面包含搜索按示例形式用下面的复选框代码:这是CheckBox HtmlHelper的意外行为吗?

<td> 
<label for="HasProcessErrors">Has Errors:</label> 
<%= Html.CheckBox("HasProcessErrors", crit.HasProcessErrors) %> 
</td> 

的爆击对象HasProcessErrors属性是布尔,其初始值是假的。当我认为我的渲染页面的源代码,我看到了助手已经产生下面的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> 

有我使用的复选框帮手这里不正确,或者是一些奇怪的事情?它似乎应该生成与checked =“”类型复选框的输入。

感谢您的任何想法。

回答

3

是的,这是正确的。

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

这里还有具有相同名称的隐藏字段,如果您调试表单提交,你会发现一个选中的复选框的值是“真,假”,而一个未经检查框的值是“假”

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

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

大卫,谢谢。我发现这样做是为了克服这个事实,即如果复选框未被选中,浏览器将不会向服务器回发一个值。我只需要在这里改变我的想法,因为在添加复选框之前,我的表单数据已经很好地绑定到了我的强类型SearchCriteria对象。现在我需要遍历FormCollection对象来检索值并手动将值传递给我的SearchCriteria对象。 – 2009-04-24 20:48:18