Asp.net mvc ASP.NET MVC搜索路径

Asp.net mvc ASP.NET MVC搜索路径,asp.net-mvc,routing,Asp.net Mvc,Routing,我设置了一个搜索路径: routes.MapRoute( "Search", "Search/{q}", new { controller = "Search", action = "Index" } ); 搜索表单有一个输入框和一个按钮。我想搜索一个得到如下 <% using(Html.BeginForm("Index", "Search", FormMethod.Get)) {%> <%:Html.TextBox("q")%> <

我设置了一个搜索路径:

routes.MapRoute(
 "Search",
 "Search/{q}",
 new { controller = "Search", action = "Index" }
);
搜索表单有一个输入框和一个按钮。我想搜索一个得到如下

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

但我希望搜索结果是:


如何设置路由或Html.BeginForm

仅使用表单并没有一种简单的方法。表单的预期功能是传输名称/值对-使用MVC不会改变这一点

因此,您的选择是:

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

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

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

这需要在服务器和客户端之间进行额外的往返,以便格式化url。不推荐。是的,这是额外的调用,但使用js也不是一个好方法。此外,建议不要将用户留在对数据进行某些更改(删除、编辑、添加)的同一页面上,因此按f5键将要求您再次发送数据。大家都在使用它。Daniel说得很好-你不能强迫表单为你发出get请求和更改URL。实现了js click事件来重定向。我用的是很酷的,看到了吗
public ActionResult Index(string q)
{
   // search logic here

   return View(new SearchResult(q));
}