2010-05-03 139 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