Razor ViewEngine HTML.Checkbox方法创build一个隐藏的input。 为什么?

我在我的视图页面上写下了下面的代码。

@Html.CheckBox("ChxName",true) 

我得到了以下结果。

 <input checked="checked" id="ChxName" name="ChxName" type="checkbox" value="true" /> <input name="ChxName" type="hidden" value="false" /> 

为什么有一个与checkbox命名为相同的input元素?

未勾选的checkbox不会发布,所以隐藏的字段(设置为false)允许模型绑定仍然工作。

看看post后面的Request.Form。 如果checkbox被选中,你会看到:

 ChxName=true&ChxName=false 

模型联编程序使用第一个值。

如果该框没有被选中,你会看到:

 ChxName=false 

ericvg解释得很好。

手动方法是这样的:

 bool IsDefault = (Request.Form["IsDefault"] != "false"); 

或者使用包含(“真”),我觉得有点整洁…

 bool myCheckBoxValue = Server.HtmlEncode(Request.QueryString["MyCheckBoxValue"]).Contains("true");