我有这3条注册路线(按照相同的顺序):
routes.MapRoute(null, "{controller}/{categoryName}/Page{pageNumber}",
new { action = "List" }, new { controller = "Products" });
routes.MapRoute(null, "{controller}/Page{pageNumber}",
new { action = "List" }, new { controller = "Products" });
routes.MapRoute(null, "{controller}/{categoryName}",
new { action = "List" }, new { controller = "Products" });
传入的网址为:http://localhost:2575/Products/Housing/Page5。 然后,在视图中,我想生成传出的Url: http://localhost:2575/Products/Housing
我的代码是:
@Html.ActionLink(Model.CategoryName, "List",
new { categoryName = Model.CategoryName },
new { @class = "btn btn-info);
但它生成了所需的网址(http://localhost:2575/Products/Housing): http://localhost:2575/Products/Page5?categoryName=Housing
我的单位测试了我的路线方案和这条路线数据:
var routeData = new { controller = "Products", action = "List", categoryName = "Housing" };
它正确生成了预期的网址(http://localhost:2575/Products/Housing)
所以,我认为,不知何故,上面的Html帮助器,正在采用当前的路由值,并试图重用它们,这是我可以找到的唯一解释为pageNumber的值为5当我没有& #39; t指定辅助方法。
另外,如果在视图中,在生成URL之前我会这样做:
var controller = ViewContext.RouteData.Values["controller"];
var action = ViewContext.RouteData.Values["action"];
ViewContext.RouteData.Values.Clear();
ViewContext.RouteData.Values.Add("controller", controller);
ViewContext.RouteData.Values.Add("action", action);
然后正确生成URL。 注意:删除(或修改)" categoryName"的值路由值不起作用,它会继续将pageNumber设置为辅助方法。
如果是这种情况(片段重用),我该如何安全地禁用它?我害怕必须清除路线数据然后打破别的东西。如果没有,这里出了什么问题?