2010-05-03 155 views
5

我设置一个搜索路径:ASP.NET MVC搜索路径

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)); 
} 

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

但我想搜索是这样的: http://localhost:19502/search/mvc+is+great

怎么办我设置了路线或Html.BeginForm

+0

看到http://www.w3.org/TR/html401/interact/forms.html#h-17.13.1 – 2010-05-03 17:33:33

回答

5

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

那么你的选择是:

  • 覆盖使用JavaScript通过处理提交表单的情况下,重定向到所需的URL并返回false,以防止形式从实际提交
  • 形式的功能不要使用表单并处理按钮的点击事件来执行重定向。

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

+0

丹尼尔已经把这很好 - 你不能强制表单为你提出请求并修改URL。 – mare 2010-05-03 14:50:10

+0

实施js点击事件重定向。我使用了http://www.digitalbart.com/jquery-and-urlencode/,它非常酷。 – harropriiz 2010-05-03 16:56:02

0

也可以使FormMethod.Post并在控制器回报RedirectToActionResult

+0

为了格式化网址,这需要在服务器和客户端之间进行额外的往返。不建议。 – 2010-05-03 14:44:39

+0

是的,额外的电话,但使用JS也不是很好的方式。 此外,建议不要将用户放在数据更改(删除,编辑,添加)的同一页面上,所以按f5键,您将被要求再次发送数据。并看看 - http://stackoverflow.com/questions/1936/how-to-redirecttoaction-in-asp-net-mvc-without-losing-request-data - 人们正在使用它。 – 2010-05-03 22:48:47