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

Both true and false got from checkbox if it is checked

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

我的看法:

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

SomeInput 中使用值 data 并且未选中 checkbox 我得到 url:

...?someInput=data&myCheckbox=false

并勾选 checkbox 我得到:

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

这是正常行为。

标准 html 表单不发送复选框,除非它被选中。如果未选中该框,这将导致您的查询字符串中缺少参数。

html 助手为您请求的每个 input type=checkbox 生成一个 input type=hidden(如果您花一点时间检查生成的 [=28,您会注意到这一点=]).这样做是为了确保该字段无论是否被选中都会被传递下去。所以在 "not checked" 场景中,实际的复选框被忽略,你只有隐藏字段的值:

myField=false

如果复选框被选中,两者都被传递下来,具有相同的名称:

myField=true&myField=false

如果我没记错的话,如果你在接收动作方法中声明了一个参数 bool myField,默认的 ModelBinder 会处理这个特定的场景,并且会在复选框被选中时 true 和 [=16] =] 当它不是时。