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

<代码>

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

有帮助吗?

解决方案

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

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

其他提示

你可以尝试:

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

善,

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

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

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

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

}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top