我想显示每个省或每个区域的山地自行车道列表。一个省由许多地区组成。
我正在尝试显示以下2个网址:
www.mywebsite.com/paarl-trails (area trails)
www.mywebsite.com/western-cape-trails (province trails)
我有以下路线配置(按此顺序):
routes.MapRoute(
name: "ProvinceDefault",
url: "{seoProvinceName}-trails",
defaults: new { controller = "Province", action = "Index" },
namespaces: new[] { "MyProject.WebUI.Controllers" }
);
routes.MapRoute(
name: "AreaDefault",
url: "{seoAreaName}-trails",
defaults: new { controller = "Area", action = "Index" },
namespaces: new[] { "MyProject.WebUI.Controllers" }
);
这是我在视图中创建链接的方式:
<a href="@Url.RouteUrl("AreaDefault", new { seoAreaName = trail.Area.SeoName })">@trail.Area.Name</a>,
<a href="@Url.RouteUrl("ProvinceDefault", new { seoProvinceName = trail.Area.Province.SeoName })">@trail.Area.Province.Name</a>
链接显示正确但两者都被重定向到省控制器的Index方法。我更改了2个路由配置,但随后它们都转到区域控制器的Index方法。
我希望www.mywebsite.com/paarl-trails
转到区域控制器的Index方法,我希望www.mywebsite.com/western-cape-trails
转到省控制器的Index方法。
我如何做到这一点?
答案 0 :(得分:1)
我同意之前的回答,因为ASP.NET MVC路由引擎无法区分这两个路由。您可以做的是在SEOProvinceName之前添加区域名称。这样,路线就是这样的:
为了使这项工作,路线应该是这样的:
routes.MapRoute(
name: "ProvinceDefault",
url: "{seoAreaName}/{seoProvinceName}-province-trails",
defaults: new { controller = "Province", action = "Index" },
namespaces: new[] { "MyProject.WebUI.Controllers" }
);
routes.MapRoute(
name: "AreaDefault",
url: "{seoAreaName}-area-trails",
defaults: new { controller = "Area", action = "Index" },
namespaces: new[] { "MyProject.WebUI.Controllers" }
);
我希望它有所帮助。
答案 1 :(得分:0)
MVC路由不是这样工作的。当从服务器请求URL时,路由引擎按照您定义的顺序选择与URL匹配的第一条路由。路由系统无法区分您已定义的两条路由,因为它们看起来相同:-trails
后面的内容。
您必须更改URL及其路由才能使路由引擎正确处理它们,如下所示:
网址:
路线:
routes.MapRoute(
name: "ProvinceDefault",
url: "{seoProvinceName}-province-trails",
defaults: new { controller = "Province", action = "Index" },
namespaces: new[] { "MyProject.WebUI.Controllers" }
);
routes.MapRoute(
name: "AreaDefault",
url: "{seoAreaName}-area-trails",
defaults: new { controller = "Area", action = "Index" },
namespaces: new[] { "MyProject.WebUI.Controllers" }
);