如何获取Html.BeginForm以更正MVC路由
-
07-07-2019 - |
题
在我的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 })
{
}
不隶属于 StackOverflow