在asp.net mvc 3中嵌套区域

3

我在使用嵌套区域时遇到了问题。

我想要在Areas文件夹中使用一个结构来组织我的区域,例如:

  • Areas
    • Admin
      • Index (默认)
      • Locations
        • Controllers
        • Models
        • Views
      • ...
    • Applications
      • Index (默认)
      • Calendar
        • Controllers
        • Models
        • Views
      • ...
    • ...

我该如何使用路由来构建它,并且如何注册每个区域。"Admin"和"Applications"是我称之为部分的内容,实际区域位于部分内。

我更喜欢使用带有额外元素(例如"section")的路由:

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

这可以实现吗?

我觉得我在路由方面有些不理解,因为添加路由只是一件事,但是我该如何命名区域(AreaName属性)呢?“Admin/Index”?“Admin.Index”?“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时,出现了一个错误:"找不到资源。" :(

如何构建我的路由以符合所需的树形结构? 我看了另一个问题:ASP.NET MVC中可以嵌套区域吗?,但它没有解决我的问题 :(

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

提前致谢

2个回答

3

请勿重构或重新组织您的Areas文件夹。保持默认设置,每个区域都有一个Controllers、Models和Views文件夹(加上AreaRegistration.cs等)。否则,您可能会遇到一系列命名空间问题。此外,您还需要告诉Razor引擎要检查哪些文件夹才能找到您的视图。相信我,只要遵循惯例,涉及区域时您的生活将更加幸福。

如果您想创建深层URL结构,请使用路由来实现。在MVC中,您的路由可以完全独立于文件夹结构(不像webforms)。

您是否尝试过在全新的MVC项目中使用此路线?意思是,没有对Areas文件夹进行重新排列?只要您的Admin区域具有带有Index操作的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
谢谢您的回答,我已经按照您的建议去做了。我在区域名称中使用名称前缀,而不是嵌套区域。这也让我在VS中获得了功能 :) - clausndk

1

我认为这不被支持。对于深层URL,我建议使用MvcCodeRouting,这样你就可以忘记路由问题了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接