1.Area是什么?
MVC 2 中引進了區域的概念,它允許將模型,視圖和控制器分成單獨的功能節點,換句話說,可以在大型復雜的網站中建立幾個區域(模塊),每一個區域都有Model,View,Controller機制.
2.什么時候使用Area?
當項目復雜時,可能需要許多個Controller,View,如果有n個開發團隊來開發,如果只在一個項目中創建,難出維護和管理.這時,可以考慮建立多個Area,每個Area可以由一個團隊來負責,這樣就將復雜的項目分配開了,開發管理起來也就方便了.
3.如何使用Area?
第一種:簡單的方法:
在一個項目A中,在項目文件右擊->添加->區域,輸入名稱,點擊確定后,會自動生成一組文件.


自動生成的文件: Areas文件夾下面是區域Blog,它里面包含了完整的Controller,View,Models機制,同時需要注意的是還生成一個區域注冊文件BlogAreaRegistration.cs,內容如下:
namespace MvcArea.Areas.Blog { public class BlogAreaRegistration : AreaRegistration { public override string AreaName { get { return "Blog"; } } public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "Blog_default", "Blog/{controller}/{action}/{id}", new { action = "Index", id = UrlParameter.Optional } ); } } }
繼承AreaRegistration類,重寫AreaName屬性,RegisterArea方法,注冊一個新路由. 這樣在訪問 Blog/Home/Index 時,會自動定位到Blog區域中的Controller和View.
第二種: 由於第一種方法,沒有完全從一個項目中剝離出新的區域,所以此方法有了改進.
在第一種解決方案中,新建一個mvc項目B,然后將兩個web.config文件和Global.asax文件刪除,再在項目根目錄中新建一個類文件繼承自AreaRegistration,重寫同上一種方法.
然后將第一種方法中Blog文件夾下的Controller文件夾,BlogAreaRegistration文件刪除掉
接下來,再第一個項目A中引用這個mvc項目B.
至此,達到將區域中Controller分離出來一個單獨的項目, 同樣訪問 Blog/Home/Index 時,會生效.
不足之處, View一直是顯示項目A中的View文件夾中的,如果項目B中有修改不會顯示出來,只能手動復制到項目A中的View中去, 如何改進,請看第三種解決方案.
第三種: 將區域完全獨立出來為一個項目.
同樣在項目A中創建一個Areas文件夾,再創建一個區域文件夾,如Shopping,但其中是空的,目前沒有文件.
然后新建一個項目C,同樣實例Controller,View,並在根目錄創建區域注冊類文件(繼承AreaRegistration類).
然后將項目C中的內容拷貝到Shopping目錄下面,再添加現有項目到解決方案中,也就是說,將項目C中的Controller,View都創建在區域Shopping下面.
那么,如何將項目C中的生成dll被項目A引用呢?這里使用了項目屬性中的"生成后事件"功能,由於此功能支持Dos命令,可以將dll文件從項目C復制到項目A的bin文件中.
至此,完成區域獨立,實現復雜項目的分組開發與管理.

