【问题标题】:Implementing a search page using url parameters in ASP.NET and ASP.NET MVC在 ASP.NET 和 ASP.NET MVC 中使用 url 参数实现搜索页面
【发布时间】:2010-09-24 21:40:42
【问题描述】:

假设我有一个名为 Search.aspx 的搜索页面,它将搜索字符串作为 ala Google 的 url 参数(例如 Search.aspx?q=This+is+my+search+string)。

目前,我的页面上有一个 asp:TextBox 和一个 asp:Button。我正在处理按钮的 OnClick 事件并在代码隐藏文件中重定向到 Search.aspx?q=

当您没有用于重定向的代码隐藏时,如何使用 ASP.NET MVC?您会创建一个 GET 表单元素来代替将发布到 Search.aspx 吗?或者您会以其他方式处理重定向(例如,附加到按钮的 jQuery 事件)?

【问题讨论】:

    标签: asp.net asp.net-mvc


    【解决方案1】:

    您需要了解 MVC 不会在其 URL 中直接引用 WebForms 之类的 .aspx 页面。它的主要目的是分离关注点,即模型(数据)、控制器(逻辑)和视图(表示)。

    首先,您必须创建一个与您的 URL 匹配的路由,例如:/home/search/This+is+my+search+string

    这将调用 Home 控制器的 Search 操作方法,该方法将“这是我的搜索字符串”作为输入参数。此操作负责访问模型并可能从数据库中提取结果。

    通常,您的搜索操作会返回一个 ViewResult,其中包含放置在文件夹 /Views/Home/Search.aspx 中的视图。在这里,您既不能使用 Postback 功能,也不能像在 WebForms 中那样使用 Web 控件的事件,因为 MVC 应用程序是无状态的并且不是事件驱动的。它更像是一种请求/调度的做事方式。

    Read more about MVC here.

    【讨论】:

      【解决方案2】:

      使用表单创建一个名为 Search.ascx 的用户控件:

      <% using (Html.BeginForm ("Search", "Home")) { %>
          <input name="search" type="text" size="16" id="search" />
          <input type="image" name="search-image" id="search-image" src="search.gif" />
      <% } %>
      

      在您的搜索操作中,您只需要以下内容:

      public class HomeController : Controller
      {
          public ActionResult Search (string search)
          {
              throw new Exception (string.Format ("Search: {0}", search));
          }
      }
      

      在您的母版页或您可以添加的任何地方

      <% Html.RenderPartial ("Search"); %>
      

      【讨论】:

        【解决方案3】:

        您可以在按钮的 onclick 中使用简单的 javascript 来重定向到搜索页面:

        Search <input type="text" id="go" size="4" /><input type="button" value="<%=Html.Encode(">>") %>" onclick="javascript:window.location='<%=Url.Action("Search", "Home") %>/' + document.getElementById('go').getAttribute('value')" />
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-01-20
          • 2021-04-16
          • 2011-03-28
          • 2010-10-20
          • 2011-07-26
          • 2020-04-12
          • 2021-12-06
          相关资源
          最近更新 更多