为什么查询字符串参数被包含两次- asp.net布尔

本文关键字:asp net 布尔 包含两 查询 字符串 参数 为什么 | 更新日期: 2023-09-27 17:49:33

我有我的索引页与以下代码:

    <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两次?

谢谢

为什么查询字符串参数被包含两次- asp.net布尔

这是MVC使用复选框的方式。如果浏览页面的HTML,您会注意到,对于使用HTML helper呈现的每个复选框,都有一个带假值的隐藏字段。这样可以确保在用户没有选择复选框的情况下发送false值。这就是为什么选中复选框时有两个值,不选中复选框时只有一个值。要了解更多细节,你也可以查看这篇文章:asp.net mvc:为什么是Html。复选框,生成一个额外的隐藏输入为什么CheckBoxFor呈现一个额外的输入标签,以及我如何使用FormCollection获得值?

希望能有所帮助。