2012-01-27 102 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