asp.net-mvc - 这是 CheckBox HtmlHelper 的意外行为吗?

标签 asp.net-mvc

我的 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/

相关文章:

asp.net - 发布后布局 cshtml 未呈现

mysql - 如何将 MS SQL 数据库更改为 MySQL,而不导致 ASP.NET MVC 中的 EF 和逻辑出现问题?

javascript - Knockoutjs 映射 - 没有初始数据

asp.net-mvc - JQuery 中的 ViewBag

asp.net-mvc - 没有验证属性的部分 View (ASP.NET MVC 3)

c# - 获取参数对象的属性

javascript - MVC 4使用jquery如何检查模型属性中是否有元素

c# - 正则表达式错误信息

c# - 如果 User.IsInRole 带有字符串数组?

asp.net-mvc - 子文件夹中的 Controller