在asp.net mvc 3中嵌套区域

时间:2012-01-27 21:50:02

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

我无法让嵌套区域工作。

我想在Areas文件夹中使用一个结构来组织我的区域。即:

    • 管理
      • 索引(默认)
      • 位置
        • 控制器
        • 模型
        • 浏览
      • ...
    • 应用
      • 索引(默认)
      • 日历
        • 控制器
        • 模型
        • 浏览
      • ...
    • ...

如何使用路径构建结构,以及如何注册每个区域。 “Admin”和“Applications”就是我所说的部分,然后实际区域位于一个部分内。

我更喜欢使用带有额外元素的路径,部分,如:

routes.MapRoute(
    "Applications_default",
    "{section}/{area}/{controller}/{action}/{id}",
    new { section = "Applications", area = "Index", action = "Index", controller = "Home", id = UrlParameter.Optional }
);

这可能吗?

我认为我遗漏了路线的东西,因为添加路线是一回事,但是我将该区域命名为什么(AreaName属性)? “管理员/指标”? “Admin.Index”? “索引”可以在其他地方使用..

现在我正在使用以下方式尝试“正常”区域注册:

public override void RegisterArea(AreaRegistrationContext context) {
context.MapRoute(
    "Admin_Index_default",
    "Admin/Index/{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

}

但是当我去http://localhost:60864/Admin/Index/Home/Index时,我收到一条错误消息:“无法找到资源。” :(

如何构建路线以符合我想要的树形结构? 我看了另一个问题:Can I nest areas in ASP.NET MVC?,但它没有解决我的问题:(

任何帮助和指导将不胜感激!

提前致谢

2 个答案:

答案 0 :(得分:3)

您不应重组或重新组织您的区域文件夹。保持默认值,每个区域都有一个Controllers,Models和Views文件夹(以及AreaRegistration.cs等)。否则,您可能正在处理名称空间问题的spiderweb。此外,您必须告诉剃须刀引擎检查哪些文件夹以查找您的视图。相信我,如果你只是遵循各地区的惯例,你的生活会更快乐。

如果要创建深层URL结构,请使用路由。您的路由可以完全独立于MVC中的文件夹结构(与webforms不同)。

您是否尝试使用新的MVC项目?意思是,没有重新安排区域文件夹?它应该可以工作,只要您的管理区域有一个带有索引操作的HomeController:

public override void RegisterArea(AreaRegistrationContext context) {
    context.MapRoute(
        "Admin_Index_default",
        "Admin/Index/{controller}/{action}/{id}",
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

答案 1 :(得分:1)

我不认为这是支持的。对于深层网址,我建议使用MvcCodeRouting,您可以忘记路由问题。