4

我的索引页面包含以下代码:

    <div class="editor-field">
        @Html.CheckBoxFor(model => model.IncludeArchive)
        @Html.ValidationMessageFor(model => model.IncludeArchive)
    </div>

我的模型是:

public class SearchModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string TestNumber { get; set; }
    public bool IncludeArchive { get; set; } 
}

    [Authorize]
    public ActionResult Index(SearchModel search)
    {
        var test= db.Test.AsQueryable();

        if (Request.QueryString.Count > 0) {
            if (!search.IncludeArchive) test = test.Where(x => x.Status == "Active");
        } else {
            test= test.Where(x => x.Status == "Active");
        }

        ViewBag.testList = test.ToList();

当浏览到页面然后选择 IncludeArchive 复选框以将其启用为 true 时,查询字符串变为

http://localhost:64005/test/?FirstName=&LastName=&TestNumber=&IncludeArchive=true&IncludeArchive=false

为什么它在查询字符串中包含两次变量 IncludeArchive?

谢谢

4

1 回答 1

3

这就是 MVC 使用复选框的方式。如果您浏览页面的 HTML,您会注意到对于使用 HTML 帮助器呈现的每个复选框,您都有一个带有 false 值的隐藏字段。这可以确保在用户未选中您的复选框的情况下发送错误值。这就是为什么如果你选择一个复选框你有两个值,如果你不选择它只有一个值。有关更多详细信息,您还可以查看以下帖子: asp.net mvc:为什么 Html.CheckBox 会生成额外的隐藏输入 为什么 CheckBoxFor 会呈现额外的输入标签,以及如何使用 FormCollection 获取值?

希望能帮助到你。

于 2012-12-25T10:37:16.910 回答