ASP.NET MVC 搜索路由

Posted

技术标签:

【中文标题】ASP.NET MVC 搜索路由【英文标题】:ASP.NET MVC search route 【发布时间】: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

【问题讨论】:

见w3.org/TR/html401/interact/forms.html#h-17.13.1 【参考方案1】:

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

所以你的选择是:

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

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

【讨论】:

Daniel 说得非常好 - 您不能强制表单为您发出获取请求并更改 URL。 实现了js点击事件重定向。我用的digitalbart.com/jquery-and-urlencode 很酷。【参考方案2】:

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

【讨论】:

这需要在服务器和客户端之间进行额外的往返以格式化 url。不推荐。 是的,额外的调用,但使用 js 也不是好方法。并且还建议不要将用户留在对数据进行了一些更改(删除、编辑、添加)的同一页面上,因此按 f5 会要求您再发送一次数据。看看 - ***.com/questions/1936/… - 人们正在使用它。

以上是关于ASP.NET MVC 搜索路由的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC 路由:绕过路径的静态文件处理程序

ASP.NET MVC教程五:ASP.NET MVC中的路由

asp.net MVC 路由

ASP.NET MVC

Asp.net MVC 路由基础

混合 ASP.NET 和 MVC 路由