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

时间:2011-01-04 20:16:42

标签: asp.net html asp.net-mvc checkbox

  

可能重复:
  asp.net mvc: why is Html.CheckBox generating an additional hidden input

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

<input id="blah-64" name="blah-64" value="true" type="checkbox">
<input name="blah-64" value="false" type="hidden">

问题是,当我发布表单时,表单键“blah-64返回”,关闭“。

为什么会这样?

1 个答案:

答案 0 :(得分: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. 
...

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