如果选中复选框,则true和false都会从复选框中获取

时间:2015-01-14 13:05:10

标签: asp.net-mvc model-view-controller checkbox

在我的MVC视图中,我有form方法GET。在那种形式,我有几个领域工作正常。添加checkbox后我发现了奇怪的行为。如果取消选中checkbox,我myCheckbox=false参数中会GET,但当我检查checkbox我有myCheckbox=true&myCheckbox=false时。

我的观点:

...
@using (Html.BeginForm("MyAction", "MyController", FormMethod.Get)) { 
<fieldset>
    SomeInput: @Html.TextBox("someInput") <br />
    ...
    MyCheckbox: @Html.CheckBox("myCheckbox") <br />
</fieldset>
}
...

data中的值为SomeInput且未经检查checkbox我正在获取网址:

...?someInput=data&myCheckbox=false

并且选中了checkbox我得到了:

...?someInput=data&myCheckbox=true&myCheckbox=false

1 个答案:

答案 0 :(得分:1)

这是正常行为。

除非选中,否则标准html表单不会发送复选框。如果未选中此框,则会导致查询字符串中缺少参数。

html帮助器为您要求的每个input type=hidden生成input type=checkbox(如果您花一点时间检查生成的html,您会注意到这一点)。这样做是为了确保无论是否检查该字段都是向下传递的。所以在&#34;未检查&#34;方案将忽略实际复选框,并且您只有隐藏字段中的值:

myField=false

如果选中该复选框,则两者都传递下来,名称相同:

myField=true&myField=false

如果我没记错,如果您在接收操作方法中声明参数bool myField,则默认的ModelBinder会处理此特定情况,并会在选中此复选框并true时为您false提供支持当它不是。