【问题标题】:searching by query string in asp.net mvc在 asp.net mvc 中按查询字符串搜索
【发布时间】:2012-01-03 16:12:35
【问题描述】:

我的 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?searchterm=&IsReturned=false

但是当我选中 IsReturned' 复选框时,网址是这样的:

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

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

我该如何解决这个问题?

【问题讨论】:

  • 我建议使用强类型模型。
  • 这是一个视图内的搜索表单,它把它模型化为 'IEnumerable' 所以我不能将复选框绑定到模型。如果我想这样做,我必须使用 ViewModel,对吗?

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


【解决方案1】:

为什么上面的 url 有两个 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" />

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

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

【讨论】:

  • 我用 '' 替换了它,但在调试过程中,我检查了 'SearchBorrowed' 操作中的 'IsReturned' 参数,我看到该值有不受复选框值的影响。为什么?
  • @persianDev,那是因为您没有为复选框指定值:&lt;input type="checkbox" name="IsReturned" value="true" /&gt;。注意value="true" 属性。
猜你喜欢
  • 2010-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多