2012-01-27 105 views
3

我无法使嵌套区域工作。asp.net中的嵌套区域mvc 3

我想使用Areas文件夹内的结构来组织我的区域。即:

  • 地区
    • 联系
      • 指数(默认)
      • 位置
        • 控制器
        • 模型
        • 查看
      • ...
    • 应用
      • 指数(默认)
      • 日历
        • 控制器
        • 模型
        • 查看
      • ...
    • ...

如何去结构与路线,我如何注册的每个区域。 “管理员”和“应用程序”是我称之为部分,然后实际区域位于部分内。

我将使用的路线与一个额外的元素,部分更喜欢,像这样:

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?,但它并没有解决我的问题:(

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

在此先感谢

回答

3

您不应该重组或重新组织您的区域文件夹。保持默认状态,每个区域都有一个Controllers,Models和Views文件夹(加上AreaRegistration.cs等)。否则,你可能正在处理一个名称空间问题的蜘蛛网。此外,你将不得不告诉剃刀引擎哪些文件夹要检查以查找你的意见。相信我,如果你只是遵循公约谈论区域,你的生活将会更加幸福。

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

你是否尝试过使用新鲜MVC项目的路线?含义,不重新安排Areas文件夹?它应该工作,只要你的管理区域有一个索引行动的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 2012-01-31 17:25:58

+0

这真的是很好的建议! – 2015-11-18 22:58:43

1

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

+0

https://github.com/maxtoroq/MvcCodeRouting/blob/master/docs/README.md – toddmo 2017-05-15 20:48:48