Html.ActionLink基于routes.MapRoute生成错误的链接

时间:2013-07-17 19:25:24

标签: asp.net-mvc-4 asp.net-mvc-routing

我想我还是不明白路由。

我有三个控制器

  • AdminController
  • DashboardController
  • ProjectGroupsController

对于信息中心,我希望网址为/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

是什么给出的?

1 个答案:

答案 0 :(得分:1)

我认为你需要一些更明确的路由,因为路由器不知道Admin/{controller}/{action}/{id}{controller}/{action}/{id}的“全部捕获”之间的区别。第一个匹配的模式是它使用的模式。

您需要摆脱Admin/{controller}/{action}/{id},并且需要将管理前缀下的任何内容明确指定为路由,或者相反,删除{controller}/{action}/{id}路由,并明确创建应该的路由是根目录的一部分。