我有一个URL /产品/搜索,其中Products是控制器,Search是操作。此网址包含一个搜索表单,其操作属性为(并且应始终为)/ products / search eg;
<%using( Html.BeginForm( "search", "products", FormMethod.Post))
这在我在搜索结果中引入分页之前一切正常。例如,如果我搜索“t”,我会得到一个分页列表。所以在第2页,我的网址看起来像这样:
/products/search/t/2
显示搜索“t”的结果集的第2页。问题是表单操作现在也是/ products / search / t / 2。我希望表单始终发布到/ products / search。
我的路线是:
routes.MapRoute( "Products search",
"products/search/{query}/{page}",
new { controller = "Products", action = "Search", query = "", page = 1 });
routes.MapRoute( "Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" });
如何强制Html.BeginForm(),或更具体地说Url.Action(“搜索”,“产品”),忽略网址中的/ query / page?
由于
答案 0 :(得分:1)
修正了添加另一条路径,其中查询和页面不在网址中,这是一种反直觉的方式,因为更具体的路线在订单中更低
routes.MapRoute(
"",
"products/search",
new { controller = "Products", action = "Search", query = "", page = 1 });
routes.MapRoute(
"",
"products/search/{query}/{page}",
new { controller = "Products", action = "Search"} //, query = "", page = 1 });
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" });
答案 1 :(得分:0)
订单非常重要,它命中的第一条路线与它匹配使用。因此,抓住所有类型的路线应该在最后。这是一个有用的路由调试器,用于找出问题所在。