在我的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?
答案 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 })
{
}