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

时间:2011-03-28 17:50:18

标签: 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" />

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

3 个答案:

答案 0 :(得分:48)

未发布未选中复选框,因此隐藏字段(设置为false)允许模型绑定仍然有效。

查看帖子背面的Request.Form。如果选中该复选框,您将看到:

ChxName=true&ChxName=false

模型绑定器使用第一个值。

并且,如果未选中此框,您将看到:

ChxName=false

答案 1 :(得分:3)

ericvg解释得很清楚。

手动方法是:

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

答案 2 :(得分:3)

或者使用Contains(“true”),我发现它有点整洁......

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