Asp.net mvc Razor ViewEngine HTML.Checkbox方法创建隐藏的输入。为什么?

Asp.net mvc Razor ViewEngine HTML.Checkbox方法创建隐藏的输入。为什么?,asp.net-mvc,asp.net-mvc-3,razor,checkbox,Asp.net Mvc,Asp.net Mvc 3,Razor,Checkbox,我已经在我的查看页面上编写了以下代码 @Html.CheckBox("ChxName",true) 我得到了以下结果 <input checked="checked" id="ChxName" name="ChxName" type="checkbox" value="true" /> <input name="ChxName" type="hidden" value="false" /> 为什么有一个名为“与复选框相同”的输入元素?未选中的复选框不会过帐,因此隐

我已经在我的查看页面上编写了以下代码

@Html.CheckBox("ChxName",true)
我得到了以下结果

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


为什么有一个名为“与复选框相同”的输入元素?

未选中的复选框不会过帐,因此隐藏字段(设置为false)允许模型绑定仍然工作

请看背面的申请表。如果选中该复选框,您将看到:

ChxName=true&ChxName=false
ChxName=false
模型绑定器使用第一个值

如果未选中该框,您将看到:

ChxName=true&ChxName=false
ChxName=false

埃里克解释得很好

手动方法如下所示:

bool IsDefault = (Request.Form["IsDefault"] != "false");
或者使用包含(“true”)的内容,我觉得这有点整洁

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

这意味着,只有在未选中该复选框的情况下,该复选框才会作为false传递给控制器。如果选中,它将绑定为true。使用调试器尝试一下。另外,在没有HTML帮助程序的情况下尝试一下,您可以看到他们为什么这样做。因此,据我所知,如果选中复选框,并且控制器在该复选框之后获取隐藏字段的值,则隐藏字段的值将变为真。我在跟踪你吗?不,隐藏的值总是假的,并且总是被发布的。如果选中该框,则也会发布一个true,并且模型绑定器使用该true值。这是一个常见的问题,因此如果您仍然不理解mvc源代码或只是查看mvc源代码,您可能需要搜索一下。没问题——下面是另一个可以更好地解释它的答案: