我想我还是不明白路由。
我有三个控制器
对于信息中心,我希望网址为/Dashboard/
。但是,对于Admin部分,我想要两个不同的控制器。 /Admin/Overview
应该使用AdminController
,/Admin/ProjectGroups/
应该使用ProjectGroupsController
。
这就是我的路由的样子
routes.MapRoute(
name: "AdminOverivew",
url: "Admin/Overview",
defaults: new { controller = "Admin", action = "Overview" },
namespaces: new[] { "Com.Controllers" }
);
routes.MapRoute(
name: "AdminSubs",
url: "Admin/{controller}/{action}/{id}",
defaults: new { action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "Com.Controllers" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Login", action = "Index", id = UrlParameter.Optional },
namespaces: new[] {"Com.Controllers"}
);
*注意,第二条路线的原因是因为我在管理部分下有更多的控制器。
它正在工作..除了HTML.ActionLink生成的URL是错误的。 @Html.ActionLink("Dashboard", "Index", "Dashboard"........)
生成/Admin/Dashboard
时应为/Dashboard
。
但是,@Html.ActionLink("Project Groups", "Index", "ProjecGroups".....)
会生成正确的网址/Admin/ProjectGroups
如果我拿出第二条路线.MapRoute(AdminSubs),那么情况就会逆转。信息中心获取正确的网址/Dashboard
,然后项目组变为/ProjectGroups
时应保留/Admin/ProjectGroups
是什么给出的?
答案 0 :(得分:1)
我认为你需要一些更明确的路由,因为路由器不知道Admin/{controller}/{action}/{id}
和{controller}/{action}/{id}
的“全部捕获”之间的区别。第一个匹配的模式是它使用的模式。
您需要摆脱Admin/{controller}/{action}/{id}
,并且需要将管理前缀下的任何内容明确指定为路由,或者相反,删除{controller}/{action}/{id}
路由,并明确创建应该的路由是根目录的一部分。