2009-09-16 56 views
2

在我的ASP.NET MVC應用程序,我有以下GET輸入字段:如何獲得Html.BeginForm去糾正MVC路線

<% using (Html.BeginForm("Search", "Products", FormMethod.Get) { %> 
    <input type="text" name="searchQuery" id="searchQuery" /> 
<% } % 

我想這個去的路線:

routes.MapRoute("ProductSearchRoute", 
    "Products/Search/{searchQuery}/{pageNumber}", 
new { controller = "Products", action = "Search", pageNumber = 1 }); 

問題是,它會將/ Products作爲查詢字符串,例如產品?SEARCHQUERY = Motoroil。我如何獲得它使用我的ProductSearchRoute,而不是形式/ Products/Search/Motoroil?

回答

3

如果我理解正確的話,你要動態地改變位置的形式員額,基於輸入的形式?

您需要使用javascript才能更改表單的目標屬性。 BeginForm()用於呈現從html角度來看的表單標記,它是靜態的。

1

你可以嘗試:

<% using (Html.BeginRouteForm("ProductSearchRoute", FormMethod.Get)) %> 

善良,

+0

這是有1/2的方式。它仍然創建查詢字符串「?」:http:// localhost:8820/Products/Search /?searchQuery = test – Alex 2009-09-16 06:42:41

+1

基本上,我怎麼才能理解我的輸入「searchQuery」對應於/ Products/Search/{searchQuery } < - 把值而不是{searchQuery} – Alex 2009-09-16 06:44:46

+2

我很確定沒有辦法做到這一點。 HTML Helper方法爲瀏覽器呈現一個表單標籤 - 但是沒有任何東西會根據在呈現表單後出現的用戶輸入來改變表單的target屬性。你需要使用javascript我認爲。 – womp 2009-09-16 06:47:23

0

正如@Daniel Elliott建議的那樣,使用BeginRouteForm。爲了讓您的URL正確生成,您必須在路由表中定義具有相同名稱的路由值。

@using (Html.BeginRouteForm("ProductSearchRoute", new { searchQuery= "my query", pageNumber = 1 }) 
{ 

} 
1
public ActionResult SearchQuery (string searchQuery) 
{ 
    return RedirectToAction (searchQuery, "/Products/Search"); 
} 

public ActionResult Search (string searchQuery) 
{ 
    return View(); 
}