为什么复选框也有隐藏标签?

Bla*_*man 3 html asp.net checkbox asp.net-mvc

可能重复:
asp.net mvc:为什么Html.CheckBox会生成一个额外的隐藏输入

我在asp.net mvc应用程序中渲染一个复选框,控件也输出一个隐藏字段,如下所示:

<input id="blah-64" name="blah-64" value="true" type="checkbox">
<input name="blah-64" value="false" type="hidden">
Run Code Online (Sandbox Code Playgroud)

问题是,当我发布表单时,表单键"blah-64返回",关闭".

为什么是这样?

Dan*_*plo 8

如果您查看Checkbox帮助程序的源代码,您将看到一条解释它的注释.它看起来像这样:

if (inputType == InputType.CheckBox) { 
    // Render an additional <input type="hidden".../> for checkboxes. This 
    // addresses scenarios where unchecked checkboxes are not sent in the request. 
    // Sending a hidden input makes it possible to know that the checkbox was present 
    // on the page when the request was submitted. 
...
Run Code Online (Sandbox Code Playgroud)

这是因为W3C规范说,"当提交表单时,只有"复选框控件才能成功." (成功作为提交价值的期限).隐藏字段确保提交它们,无论它们是否被检查.如果您不想要这种行为,那么最简单的方法是自己呈现HTML而不使用帮助器.