mvc4区域内的路由操作无法映射操作

时间:2012-05-17 04:38:20

标签: asp.net-mvc c#-4.0 asp.net-mvc-4 asp.net-mvc-routing

我在尝试在我所在的地区工作时遇到了麻烦。

我的区域叫ABC,我在区域内有一个名为Home的控制器。如果我浏览“http:// localhost:8000 / abc”,我可以使用Home / Index命中断点但是当我尝试点击另一个名为“http:// localhost:8000 / ABC / details”的详细信息时,我得到了404。

我试过了

context.MapRoute(
           "details",
           "ABC/Home/{action}/{id}",
           new { action = "details", id = UrlParameter.Optional },
             constraints: null,
           namespaces: new[] { "WebApplication.Areas.ABC.Controllers" }

       );



        context.MapRoute(
          "ABC_Home",
          "ABC/{controller}/{action}/{id}",
          new { controller = "home",action="Index", id = UrlParameter.Optional },
            constraints: null,
            namespaces: new[] { "WebApplication.Areas.ABC.Controllers" }
      );

如果我使用“http:// localhost:8000 / ABC / Home / Details”,我可以点击动作

 context.MapRoute(
           "details",
           "Home/Home/{action}/{id}",
           new {controller="home", action = "details", id = UrlParameter.Optional },
             constraints: null,
           namespaces: new[] { "WebApplication.Areas.ABC.Controllers" }

       );

理想情况下,如果可能,我不想在网址中使用home。我究竟做错了什么?

任何帮助都会很棒!

2 个答案:

答案 0 :(得分:3)

我认为你只需要一条路线。不要在路径中包含控制器,因为它似乎是从 / ABC 开始暗示的;只需将控制器指定为默认值:

context.MapRoute(
    "ABC_Home",
    "ABC/{action}/{id}",
    new { controller = "home", action="Index", id = UrlParameter.Optional },
    constraints: null,
    namespaces: new[] { "WebApplication.Areas.ABC.Controllers" }
}

根据您的要求,这会将 / abc 路由到 / home / index ,并将 / abc / details 路由到 /家庭/细节的。

然后,如果您需要访问其他控制器,可以为其添加另一个规则,类似于默认规则:

context.MapRoute(
    "Default_Route",
    "{controller}/{action}/{id}",
    new { id = UrlParameter.Optional }
}

答案 1 :(得分:0)

我认为您不能默认具有可变动作名称的控制器,否则无法从路由中判断出它是动作或控制器以及要匹配的路径。我认为你可以对行动进行硬编码:

Context.MapRoute(
    "ABC_Home_Details",
    "ABC/Details/{id}",
    new { controller = "home", action="details", id = UrlParameter.Optionsl },
    constraints: null,
    namespaces: new [] { "WebApplication.Areas.ABC.Controllers" }
);