在asp.net mvc中按查询字符串搜索

时间:2012-01-03 16:12:35

标签: c# asp.net-mvc-3 query-string

我的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")%>
        <%} %>

这是'SearchBorrowed'动作:

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”复选框时, 它返回结果,网址如下:

... / SearchBorrowed搜索关键词=安培; IsReturned =假

但是当我检查IsReturned'Checkbox时,网址就是这样的:

... / SearchBorrowed搜索关键词= S&安培; IsReturned =真安培; IsReturned =假

为什么上面的网址中有两个IsReturned?!

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

  

为什么上面的网址中有两个IsReturned?!

因为Html.CheckBox助手会生成一个与复选框同名的其他隐藏输入字段。如果查看生成的HTML,您将看到帮助程序生成了以下2个输入字段:

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

这是设计的。此帮助程序旨在绑定到视图模型上的布尔属性。如果未选中复选框字段,则不会向服务器发送任何值,因此如果没有隐藏字段,则无法将其绑定到布尔字段。

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