MVC4 中使用 Area 和 注意的地方

來源:互聯網
上載者:User

標籤:glob   nal   splay   程式   res   root   指定   style   ges   

在MVC項目中經常會使用到Area來分開不同的模組讓項目結構更加的清晰。

步驟如下:

 項目 –> 添加 -> 地區 (Area)

 輸入 Admin

添加成功後

Area包含:
建立一個空MVC工程結構類似,Admin Area 有自己的 Controllers、Models 和 Views 檔案夾,不一樣的地方就是多了一個 AdminAreaRegistration.cs 檔案,這個檔案中定義了一個叫 AdminAreaRegistration 的類,它的內容如下:

 

根目錄可以放一套一樣的結構用來做前端開發使用,而admin 目錄一般會作為管理員後台來開發!

 

AdminAreaRegistration.cs 檔案,這個檔案中定義了一個叫 AdminAreaRegistration 的類,它的內容如下:

 1 namespace MvcApp4.Areas.Admin 2   { 3       public class AdminAreaRegistration : AreaRegistration 4      { 5          public override string AreaName 6           { 7               get 8               { 9                   return "Admin";10              }11          }12  13          public override void RegisterArea(AreaRegistrationContext context)14          {15              context.MapRoute(16                  "Admin_default",17                  "Admin/{controller}/{action}/{id}",18                  new { controller = "home", action = "Index", id = UrlParameter.Optional },19                  namespaces: new[] { "MvcApp4.Areas.Admin.Controllers" } //指定該路由尋找控制器類的命名空間20              );21          }22      }23  }
View Code

在這裡需要注意需加入 Areas 所在的命名空間,來控制 controllers 接收的參數,不然訪問會出現錯誤,往下一點會提到。

namespaces: new[] { "MvcApp4.Areas.Admin.Controllers" }

AreaRegistrationContext 類的 MapRoute 方法和 App_Start-> RouteConfig.cs  的 MapRoute 方法的使用是一樣的,只是區分Area 目錄下的路由控制!

在 Global.asax 中的 Application_Start 方法會自動加了這樣一句代碼

1 在這裡需要注意需加入 Areas 所在的命名空間,來控制 controllers 接收的參數,不然訪問會出現錯誤,往下一點會提到。2 3 namespaces: new[] { "MvcApp4.Areas.Admin.Controllers" }4 5 AreaRegistrationContext 類的 MapRoute 方法和 App_Start-> RouteConfig.cs  的 MapRoute 方法的使用是一樣的,只是區分Area 目錄下的路由控制!6 7 在 Global.asax 中的 Application_Start 方法會自動加了這樣一句代碼
View Code

調用 AreaRegistration.RegisterAllAreas 方法讓MVC應用程式在啟動後會尋找所有繼承自 AreaRegistration 的類,並為每個這樣的類調用它們的 RegisterArea 方法。

 

下面我們來做一個 Demo

 建立兩個訪問串連,內容都是一樣,都是簡單輸出一個 "hello World"

URL定位到 (areas/admin)

http://localhost:18291/Admin/Home/Index

URL定位到(根目錄)

http://localhost:18291/Home/Index 

 1 public class HomeController : Controller 2       { 3           // 4           // GET: /Admin/Home/ 5    6           public ActionResult Index() 7           { 8               return Content("hello world"); 9           }10  11      }
View Code

如果剛才沒有加入:

namespaces: new[] { "MvcApp4.Areas.Admin.Controllers" }

運行後就會出現如下錯誤:

但是如果我們把根目錄下的  /Home/Index  的內容輸出改成  “Root Say hello World” , 你會發現還是輸出 “hello World”,

這是就是  Controller的歧義問題

這就是我們需要注意的另一個地方

我們需要在App_start下的 RouteConfig.cs 也要增加一個 namespaces 來聲明 Controller 訪問的命名空間!

//App_start下的 RouteConfig.cs     public class RouteConfig    {        public static void RegisterRoutes(RouteCollection routes)        {            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");            routes.MapRoute(                name: "Default",                url: "{controller}/{action}/{id}",                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },                namespaces: new[] { "MvcApp4.Controllers" }//指定該路由尋找控制器類的命名空間 controllers            );        }    }   //areas 下的 \Admin\AdminAreaRegistration.cs     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 { controller = "home", action = "Index", id = UrlParameter.Optional },                namespaces: new[] { "MvcApp4.Areas.Admin.Controllers" } //對應的命名空間的 controllers            );        }    }
View Code

這樣訪問時就可以區分 , 不同目錄的 controller

MVC4 中使用 Area 和 注意的地方

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.