这是我的RouteConfig.cs
routes.MapRoute(null,
"{controller}/Page{page}",
new {controller = "Product", action = "Index", category = (string) null},
new {page = @"\d+"}
);
routes.MapRoute(null,
"{controller}/{category}",
new {controller = "Product", action = "Index", page = 1}
);
routes.MapRoute(null,
"{controller}/{category}/Page{page}",
new {controller = "Product", action = "Index"},
new {page = @"\d+"}
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
以下是生成网址的代码:
@Html.ActionLink("View Cart", "Index", "ShoppingCart", null, new { @class = "btn btn-orange" })
我导航到Product/Page2
,Product/Laptop
,Product/Laptop/Page2
时效果很好。问题是,只要我当前的网址包含Page
段,它就会尝试重复使用该细分来生成传出的网址。因此,如果我在Product/Page2
,则上面生成的网址为ShoppingCart/Page2
。我不知道如何避免这种情况。
请帮帮我。非常感谢你。
修改!!!
我找到了解决方法。我没有使用ActionLink
,而是像这样使用RouteLink
:
@Html.RouteLink("View Cart", "Default", new { controller = "ShoppingCart", action = "Index" }, new { @class = "btn btn-orange" })
但我仍然想使用ActionLink
,所以请帮助我。
修改!!!
当我生成指向ShoppingCart/Checkout
的链接时,解决方法不起作用。我仍然需要在Index
控制器中进行ShoppingCart
操作。
答案 0 :(得分:1)
创建一个特定于ShoppingCart的新路线模式,并通过将其置于TOP 使其成为第一条路线。
routes.MapRoute(null,
"ShoppingCart/{action}",
new {controller = "Product"});
);
通常,所有特定路线都应该首先出现。
答案 1 :(得分:0)
这是因为路由系统在尝试匹配路由时尝试评估段变量的值的方式。
因此,当使用以下参数进行渲染链接的调用时:
@Html.ActionLink("View Cart", "Index", "ShoppingCart", null, new { @class = "btn btn-orange" })
使用模板
评估路线时的框架 {controller}/Page{page}
会将controller
段变量解析为ShoppingCart
但是当它找不到page
段变量的值时(通过方法调用中的任何参数),它将会然后尝试从ViewContext中的RouteData对象解析该值。由于您已导航到Product/Page2
,因此路线值字典中page
的当前值为2
。
您可以在渲染该视图时查看ViewContext.RouteData.Values["page"]
的值来检查这一点。