CheckBox的MV3重复查询字符串值(true,false表示布尔值)

pfe*_*eds 14 query-string razor asp.net-mvc-3

我创建了一个相当直接的页面,其中包含一个复选框:

@using (Html.BeginForm("MyController", "MyAction", FormMethod.Get))
{
  @Html.CheckBoxFor(x => x.MyCheckBox)
  <input type="submit" value="Go!" />      
}
Run Code Online (Sandbox Code Playgroud)

URL填充MyCheckBox值两次!?因此:

MyAction?MyCheckBox=true&MyCheckBox=false
Run Code Online (Sandbox Code Playgroud)

如果复选框为true,它仅复制值.如果设置为false,它将仅在查询字符串中出现一次.

上面的代码是简化的,因为我有一些下拉菜单和表单上的文本框工作正常.我不认为我从这个问题中遗漏的代码有什么不寻常之处.

有没有人有类似的问题与查询字符串参数重复?

Ror*_*san 15

此行为是由复选框控件设计的.如果未选中,则标准HTML复选框控件不会传递任何值.这是不直观的.相反,ASP.Net复选框控件有2个元素,标准控件是可见的,还有一个值为'False'的隐藏控件.

因此,如果未选中该复选框,则会传递一个值:False.
如果选中,则会有两个值,TrueFalse.因此,您需要使用以下代码检查代码的有效性:

bool checkboxChecked = Request.QueryString["MyCheckBox"].Contains("True");
Run Code Online (Sandbox Code Playgroud)

  • 有趣的东西,但如果你特别关注URL的整洁性怎么办?看起来有点愚蠢的参数两次!? (2认同)
  • 注意.ToLower():bool checkboxChecked = Request.QueryString ["MyCheckBox"].ToLower().包含("true"); (2认同)