2010-09-16 61 views
8

我想創建一個嵌套區域的項目結構。例如,我有一個「家庭」區域,在此之下,我希望處理它自己的路線註冊的「新聞」區域能夠在路線指向「新聞」區域中的控制器時正確找到視圖。通過將「新聞」區域名稱更改爲「主頁/新聞」而不是簡單地將「新聞」更改爲正確的視圖。在主要的Global.asax.cs中,我實例化了所有的區域(「Home」和「News」)並分別註冊它們,因爲RegisterAllAreas()函數只找到一個深度的區域(即它只查找並註冊「Home 「區域)。是否可以在ASP.NET MVC 2中嵌套區域?

有沒有其他人試過類似的東西?這是一個重大的黑客攻擊,或者這是一個穩定的長期解決方案嗎?任何建議,你可以提供非常感謝。

+0

ASP.NET MVC的好處之一是更簡單和可讀的URL。嵌套區域越多,網址越長,並且友善程度越低。你真的需要嵌套嗎?只是一個想法(對不起,我不知道你的問題的答案)。 – 2011-02-23 01:52:32

回答

1

我相信用控制器創建類似的東西不會成爲問題,因爲它們是使用名稱空間找到的。

問題是與意見。

默認情況下,MVC路由(通過ViewEngine)僅使用RouteData集合中的Area,Controller和View值。

這是在VirtualPathProviderViewEngine中的虛擬FindView方法(並使用非虛擬GetPath)中實現的。您必須在ViewEngine中重寫FindView方法。

這不是一個非常大的或複雜的量的代碼,但是你最好的選擇是要通過源和周圍窺探,因爲有一些緩存繞來繞去和其他一些東西...

4

你可以做到這一點MvcCodeRouting,一個單獨的開源CodePlex項目。

MvcCodeRouting自動爲您的ASP.NET MVC應用程序創建最佳路線。

  1. 使用名稱空間(沒有更多的地區)組織你的控制器只要你想,可以去深。
  2. 可以在每個參數或每個站點上重寫的原始類型的默認約束。
  3. 高效匹配的類似路線的智能分組。
  4. 支持根控制器。
  5. 檢測不明確的路線。
  6. 路線格式(例如,使它們小寫)。
  7. 將您的路線作爲調用MapRoute擴展方法進行調試。
  8. 使用相同的基於命名空間的基本路線來組織您的視圖。
+0

+1有幫助的鏈接,但通常只有鏈接到另一個網站的答案要好得多,因爲他們有一些額外的解釋性文字或鏈接中至少有相關的相關引用。我添加了一個引用並突出顯示了實際回答問題的相關部分。 – 2011-02-24 17:00:26

+0

@Samuel Neff:感謝編輯,我急着回答。 – 2011-02-24 18:15:32