【问题标题】:Both true and false got from checkbox if it is checked如果选中,则 true 和 false 都来自复选框
【发布时间】:2015-03-12 16:17:18
【问题描述】:

在我的MVC 视图中,我有一个formGET 方法。在那种形式中,我有几个可以正常工作的字段。添加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 我正在获取网址:

...?someInput=data&amp;myCheckbox=false

检查checkbox 我得到了:

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

【问题讨论】:

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


    【解决方案1】:

    这是正常行为。

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

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

    myField=false
    

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

    myField=true&myField=false
    

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

    【讨论】:

      猜你喜欢
      • 2016-06-01
      • 2017-03-11
      • 2016-03-30
      • 2014-06-17
      • 2017-12-05
      • 1970-01-01
      • 2017-07-22
      • 2017-03-18
      • 1970-01-01
      相关资源
      最近更新 更多