在asp.net mvc中通过查询字符串进行搜索

本文关键字:字符串 查询 搜索 asp net mvc | 更新日期: 2023-09-27 18:19:15

我有一个窗体在我的asp.net mvc视图如下:

 <%using (Html.BeginForm("SearchBorrowed", "Admin", FormMethod.Get))
          { %>
        <%: Html.TextBox("searchTerm", Request.QueryString["searchterm"])%>
        <input type="submit" value="Search" />
        <br />
        Is Returned :
        <%:Html.CheckBox("IsReturned")%>
        <%} %>

下面是' searchborrow '操作:

public ActionResult SearchBorrowed(bool IsReturned=false, string searchTerm = null)
        {
            IEnumerable<BorrwoinfInfo> bs;
            //...Get from repository
            return View(bs.ToList());
        }

和最后的路由设置:

  routes.MapRoute(
            "SearchBorrowed", // Route name
            "{controller}/{action}/{*searchTerm}", // URL with parameters
            new
            {
                controller = "Admin",
                action = "SearchBorrowed",
                searchTerm = UrlParameter.Optional
            } // Parameter defaults

当我提交表单时没有勾选'IsReturned'复选框,它返回结果,url如下所示:

…/SearchBorrowed ? searchterm =, IsReturned = false

但是当我选中IsReturned复选框时,url会变成这样:

…/SearchBorrowed ? searchterm = s& IsReturned = true& IsReturned = false

为什么上面的url中有两个isreturn ?

在asp.net mvc中通过查询字符串进行搜索

为什么上面的url中有两个isreturn ?

因为Html.CheckBox helper生成了一个与复选框同名的附加隐藏输入字段。如果查看生成的HTML,您将看到helper生成了以下2个输入字段:

<input type="checkbox" name="IsReturned" id="IsReturned" value="true" checked="checked" />
<input type="hidden" name="IsReturned" id="IsReturned" value="false" />

这是设计的。此帮助器旨在绑定到视图模型上的布尔属性。当一个复选框字段未被选中时,没有值被发送到服务器,所以如果没有隐藏字段,您将无法将其绑定到布尔字段。

如果您不想要这个隐藏字段,您可以编写一个自定义帮助器或手动生成复选框字段。