【问题标题】:ASP.NET MVC search routeASP.NET MVC 搜索路由
【发布时间】:2011-02-15 01:37:55
【问题描述】:

我设置了一条搜索路线:

routes.MapRoute(
 "Search",
 "Search/{q}",
 new { controller = "Search", action = "Index" }
);

搜索表单有一个输入框和一个按钮。我希望使用 GET 进行搜索,如下所示。

<% using(Html.BeginForm("Index", "Search", FormMethod.Get))
{%>
    <%:Html.TextBox("q")%>
        <span class="query-button">
        <input type="submit" value="select" /></span>
    <% } %>
 </div>

SearchController 上的动作是:

public ActionResult Index(string q)
{
   // search logic here

   return View(new SearchResult(q));
}

网址变成这样: http://localhost:19502/search?q=mvc+is+great

但我希望搜索类似于: http://localhost:19502/search/mvc+is+great

如何设置路由或 Html.BeginForm

【问题讨论】:

标签: asp.net-mvc routing


【解决方案1】:

没有一个简单的方法可以只用一个表格来做到这一点。表单的预期功能是传输名称/值对 - 使用 MVC 不会改变这一点。

所以你的选择是:

  • 通过处理表单的提交事件、重定向到所需的 URL 并返回 false 以防止表单实际提交来使用 Javascript 覆盖表单的功能
  • 不要使用表单并处理按钮的单击事件来进行重定向。

您的路线已正确设置以处理此问题。

【讨论】:

【解决方案2】:

或者您可以制作 FormMethod.Post 并在您的控制器中返回 RedirectToActionResult

【讨论】:

  • 这需要在服务器和客户端之间进行额外的往返以格式化 url。不推荐。
  • 是的,额外的调用,但使用 js 也不是好方法。并且还建议不要将用户留在对数据进行了一些更改(删除、编辑、添加)的同一页面上,因此按 f5 会要求您再发送一次数据。看看 - stackoverflow.com/questions/1936/… - 人们正在使用它。
猜你喜欢
  • 2010-09-27
  • 1970-01-01
  • 1970-01-01
  • 2011-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多