c# asp.net mvc的area 轉載
新建的專案有這樣的寫法
<a class="nav-link text-warning" asp-area="" asp-controller="Home" asp-action="Index">主頁</a>
asp-area沒用過,相關:
轉載:http://www.lanhusoft.com/Article/217.html
在大型的ASP.NETmvc5專案中一般都有許多個功能模組,這些功能模組可以用Area(中文翻譯為區域)把它們分離開來,比如:Admin,Customer,Bill。ASP.NET MVC專案中把各個功能分為不同Area的之後每一個Area都有獨立的Controller,View檔案結構。這樣可以把這些功能分給不同的開發者同時開發而彼此之間不會衝突,這樣的檔案結構各司其職,直觀明瞭,易於維護和管理。下面我們看看怎麼在ASP.NET MVC5中建立一個Area和Area直接之間連結的處理。
一、ASP.NET MVC5中建立Area區域
選中我們的ASP.NET MVC專案,右鍵選單,新增=》區域,這裡我們取名為Admin,在專案根目錄將會生成一個Admin資料夾,如下圖:
我們來看這個Area是怎麼在專案的起作用的。
我們來看Global.asax.cs的程式碼:
public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); } }
第一行的程式碼:AreaRegistration.RegisterAllAreas();就是註冊 ASP.NET MVC 應用程式中的所有區域。每一個區域它有自己的都有獨立的Controller,View檔案結構和路由配置,我們完全可以把ASP.NET MVC的區域看成一個ASP.NET MVC專案。
注意:RouteConfig.RegisterRoutes(RouteTable.Routes)在AreaRegistration.RegisterAllAreas();的後面。這一點很關鍵,你最好是不要改變這個順序。之前我們談到過ASP.NET MVC路由系統是按註冊路由的先後順序來匹配的,這裡RegisterAllAreas在前面表示MVC路由系統會先去匹配Area中的路由配置規則,如果你改變了順序可能會找到錯誤的Controller,發生意外的錯誤。
在ASP.NET MVC5的每個區域都有一個類:區域名+AreaRegistration,比如我們剛才建的一個Admin區域AdminAreaRegistration類:
public class AdminAreaRegistration : AreaRegistration { public override string AreaName { get { return "Admin"; } } public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "Admin_default", "Admin/{controller}/{action}/{id}", new { action = "Index", id = UrlParameter.Optional } ); } }
這個類的作用主要是用於標示區域名稱和區域Controller的路由,可以看到路由規則為"Admin/{controller}/{action}/{id}",前面統一跟了一個Admin。
二、在Area區域的檢視之間Action的連結跳轉的處理
當在ASP.NET MVC專案中使用了AreaArea區域後,會涉及到不同Area的Action連結之間相互跳轉,我使用Html.ActionLink有些地方需要注意。
1、同一個Area之間跳轉
在Area區域的檢視中生成指向同一個Area的Action連結時,你不需要做任何處理,當你呼叫Html.ActionLink時MVC框架自動去找當前Area的相應路由來生成Action的連結。如下:
@Html.ActionLink("Click me", "About")
生成下面的html:
<a href="/Admin/Home/About">Click me</a>
2、不同Area之間跳轉
@Html.ActionLink("Click me to go to another area", "Index", new { area = "Support" })
把Route中的area指定就可以了。
3、跳轉到不帶Area的Action
我們知道使用Html.ActionLink沒有指定area,預設就是當前的area。有時我們需要連結到頂層的Controller的Action,就是不要帶area,也很簡單,只需要把area傳空字串就可以了。如下:
@Html.ActionLink("Click me to go to another area", "Index", new { area = "" })