標籤:asp.net mvc .net c#
ASP.NET MVC 路由(四)
前言
在前面的篇幅中我們講解路由系統在MVC中的運行過程以及粗略的原理,想必看過前面篇幅的朋友應該對路由有個概念性的瞭解了,本篇來講解地區,在讀完本篇後不會肯定的讓你對地區有徹底的瞭解,但是會讓你在以後對這部分知識掌握的路上夯上厚實的基礎。
地區
在路由的起初在按照VS環境建立的MVC項目來講的,今天地區也是按照這樣的套路來講。MSDN上說,在大型項目使用中被MVC劃分為較小單元也就是地區,我沒有使用過地區的經驗,所以這篇只能講解它的物件模型以及粗略的原理。
(沒有MVC項目的建立一個)首先在MVC項目中,右鍵項目->添加->地區,然後在彈出的對話方塊中輸入地區的名稱,
點擊添加後會發現在項目中出現這樣的目錄結構,
暫時先不管這些目錄結構的意思,先來看一下前面篇幅中說到的Global.asax檔案中的MvcApplication類的Application_Start()方法中註冊地區的代碼:
1 AreaRegistration.RegisterAllAreas();
RegisterAllAreas()方法就是註冊所有地區的意思,過程:
在RegisterAllAreas()方法執行的時候內部會根據MVC-AreaRegistrationTypeCache.xml地區快取檔案來讀取所緩衝的所有地區類型(全部是實現AreaRegistration),如果快取檔案中為空白,則會遍曆當前系統所依賴的所有程式集搜尋AreaRegistration類型且寫入到快取檔案。
並且返回一個類型集合,此時的類型集合中都是實現了AreaRegistration類型的實作類別,在遍曆每一個類型的時候都會引用傳遞的把當前系統的路由表RouteTable.Routes傳遞到建立對象AreaRegistrationContext(參數內容物件)中,隨後再調用基類AreaRegistration的抽象方法RegisterArea(),當然了這是架構中才這麼實現的,而在實際情況中此處的基類AreaRegistration已經是上述樣本中的AreaCaseAreaRegistration類型了。
到這裡我們看一下AreaCaseAreaRegistration類型的內部實現:
1 public class AreaCaseAreaRegistration : AreaRegistration 2 { 3 public override string AreaName 4 { 5 get 6 { 7 return "AreaCase"; 8 } 9 }10 11 public override void RegisterArea(AreaRegistrationContext context)12 {13 context.MapRoute(14 "AreaCase_default",15 "AreaCase/{controller}/{action}/{id}",16 new { action = "Index", id = UrlParameter.Optional }17 );18 }19 }
這裡要說的是在RegisterArea()方法中的AreaRegistrationContext類型中的MapRoute()方法並不是RouteCollectionExtensions擴充類型中的方法,而是在此外面又封裝了一層,此處的MapRoute()方法註冊的路由對象中DataTokens屬性值” area”索引下則是次路由所在的地區,也就是地區名稱。
這個時候可以通過調試發現,地區中的路由也和程式中定義的路由一起被註冊到了路由表中,說明地區也就是路由定義在物理檔案上的劃分,當然還有其它大的作用,本人暫時沒有領悟到,有感了會第一時間和大家分享。
金源
出處:http://blog.csdn.net/jinyuan0829
本文著作權歸作者和CSDN共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面