在我的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
答案 0 :(得分:1)
这是正常行为。
除非选中,否则标准html表单不会发送复选框。如果未选中此框,则会导致查询字符串中缺少参数。
html帮助器为您要求的每个input type=hidden
生成input type=checkbox
(如果您花一点时间检查生成的html,您会注意到这一点)。这样做是为了确保无论是否检查该字段都是向下传递的。所以在&#34;未检查&#34;方案将忽略实际复选框,并且您只有隐藏字段中的值:
myField=false
如果选中该复选框,则两者都传递下来,名称相同:
myField=true&myField=false
如果我没记错,如果您在接收操作方法中声明参数bool myField
,则默认的ModelBinder会处理此特定情况,并会在选中此复选框并true
时为您false
提供支持当它不是。