ASP.NET MVC搜索路由

har*_*iiz 5 asp.net-mvc routing

我设置了搜索路线:

routes.MapRoute(
 "Search",
 "Search/{q}",
 new { controller = "Search", action = "Index" }
);
Run Code Online (Sandbox Code Playgroud)

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

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

SearchController上的操作是:

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

   return View(new SearchResult(q));
}
Run Code Online (Sandbox Code Playgroud)

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

但我希望搜索结果如下: http:// localhost:19502/search/mvc + is + great

如何设置路由或Html.BeginForm

Dan*_*fer 5

没有简单的方法只使用表单来完成它.表单的预期功能是传输名称/值对 - 使用MVC不会改变它.

所以你的选择是:

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

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