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 搜索路由的主要内容,如果未能解决你的问题,请参考以下文章