如何获取Html.BeginForm以更正MVC路由

时间:2009-09-16 06:27:57

标签: asp.net-mvc asp.net-mvc-routing

在我的ASP.NET MVC应用程序中,我有以下GET输入字段:

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

<% 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?

4 个答案:

答案 0 :(得分:3)

如果我理解正确,您是否会根据表单的输入动态更改表单发布到的位置?

您需要使用javascript来改变表单的目标属性。 BeginForm()用于呈现表单标记,从html角度来看,它是静态的。

答案 1 :(得分:1)

你可以尝试:

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

善,

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

正如@Daniel Elliott建议的那样,使用BeginRouteForm。要正确生成URL,必须使用路由表中定义的相同名称设置routevalues。

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

}