成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解ASP.NET MVC 2中的Area特性

開發 后端
新的ASP.NET MVC 2預覽版發布后,其中有一項Area特性增強。本文將為大家詳細講述Area特性的來龍去脈。

51CTO在1月曾專訪過微軟MVP衣明志老師,主要話題就是ASP.NET MVC 2。其中我們曾談到Area特性,在這里特組織這篇文章供大家了解ASP.NET MVC 2中的Area。想學習更多ASP.NET MVC,請參考教程《ASP.NET MVC框架視頻教程

最近裝了mvc2 pr2版本,看了下說明文檔,里面著重提示說更新了area項目,因此著重看了一下。若干心的,和大家共享,有錯沒錯,歡迎大家拍磚。

沒有Areas前相同問題的處理

在mvc1.0時代,如果要將網站按目錄結構來區分。例如

  1. Website/Index  
  2. Admin/ Index  
  3. User/ Index  
  4. ……/…… 

通常都是在Views下面建立若干個和Controller相對應的目錄,然后在里面放置aspx頁面

  1. Views\Website\Index  
  2. Views\Admin\Index  
  3. Views\User\Index  
  4. Views\.......\....... 

這樣建立若干個目錄

其實這樣也沒什么不好,***不好的可能就是隨著業務的需要,結構需求會越來越多,views目錄下面的文件夾越來越多,更或者你需要更細結構的頁面路徑,例如:

  1. Website/Product/Index  
  2. Website/Catalog/Index  
  3. Website/Contect/Index 

當然,你可以用UrlRouteing或者ViewEngine搞定這些問題。但是毫無疑問,隨著網站的運行日久,同一個Controller目錄下的文件會越來越多,對于同一個Controller下的ActionResult的命名和UrlRouting里面的維護帶來不小的麻煩。給管理帶來不方便【個人理解】。

現在出Areas之后,這個問題有所緩解。還是如上的Url

  1. Website\Product\Index  
  2. Website\Catalog\Index  
  3. Website\Order\Index  
  4. Website\Contact\Index 

可以使用mvc2.0新增的Area來解決這個問題

建立項目

首先,用mvc2建立一個新項目,在網站根目錄下建立Areas文件夾,在Areas文件夾建立你要區分的目錄,例如本例的Website,然后繼續在Website目錄下增加Views目錄,繼續在views目錄下增加需要分類管理Controller目錄和建立aspx文件。使文件結構形成

  1. Areas\Website\Views\Product  
  2. Areas\Website\Views\ Catalog  
  3. Areas\Website\Views\ Order  
  4. Areas\Website\Views\ Contact 

建立項目 

到原有默認的views目錄將web.config復制到現在的新的views目錄,你甚至現在可以把原有的views目錄刪除掉

建立Areas區域UrlRouting

隨便找個地方,建立一個新的類,繼承AreaRegistration實現抽象類

修改Global.sas

  1. protected void Application_Start()  
  2.         {  
  3. AreaRegistration.RegisterAllAreas();  
  4. //注冊區域Url規則,注意先后順序  
  5. RegisterRoutes(RouteTable.Routes);  
  6.         } 
為區域頁面建立Controller類

為區域頁面建立Controller類沒什么區別,可以建立在另外一個外部類庫項目上,***需要注意的就是命名空間需要和注冊Area規則的類的命名空間的前導一致。我們知道,在不使用Areas的時候Controller是不受namespace約束的。也就是說只要你有一個Controller名,而不管他在哪個命名空間下都是可以起作用的,如果我們在不同的命名空間建立2個相同的Controller類名,編譯的時候不會出錯,但是運行mvc網站的時候會提示存在2個相同的Controller類,系統不知道使用哪個。但是Areas卻有所限制,他一定要命名空間的前導和AreaRegistration類得命名空間相同。例如:我建立的AreaRegistration網站項目命名空間為Valor.Asmyna.Areas.Website然后我將Controller分開作為一個獨立的類庫,如果我隨便寫一個命名空間空間,這個Controller對于Area里面的views是不起作用的,但是他卻對原始Views目錄的Controller起作用,只有將他的命名空間設置成Valor.Asmyna.Areas.Website.xxx.xxx的前導才起作用

  1. namespace Valor.Asmyna.Areas.Website  
  2.  
  3. {  
  4.  
  5.     public class HomeController : Controller  
  6.  
  7.     {  
  8.  
  9. public ActionResult Index()  
  10.         {  
  11.             ViewData["title"] = "Website/Home/Index";  
  12.             return View();  
  13.         }  
  14.     }  
  15. public class ProductController : Controller  
  16.     {  
  17.         public ActionResult Index()  
  18.         {  
  19. ViewData["title"] = "Website/Product/Index";  
  20. return View();       }  
  21.     }  
  22. public class ContentController : Controller  
  23.     {  
  24.         public ActionResult Index()  
  25.         {  
  26.   ViewData["title"] = "Website/Content/Index";  
  27.     return View();  
  28.         }   }  

Ok,到瀏覽器測試一下看看

Area結構完全一致會出現的問題

我們繼續在Area目錄下增加一個Home目錄,在他的Veiws目錄下也增加三個相同的controller目錄

瀏覽器中測試

直接在剛才注冊Website AreaRegistration命名空間為他注冊一個Area規則,用默認系默認的Controller為Home.,

對2個路徑進行訪問:

/Website/Product

/Home/Product

這個時候controller對于這2個area目錄的views都能起作用。在頁面打印得到的結果一致

View結果

顯然這樣是不對的.由此我們剛才想到Area的Controller的選擇名命名空間限制問題。那我們他們分開來注冊看看。修改Home區域的AreaRegistration的命名空間和在為HomeArea建立一個Controller類,使他們的命名空間一致。這次我們用Valor.Asmyna.Areas.Website

  1. namespace Valor.Asmyna.Areas.Home{  
  2.    public class HomeController : Controller  
  3.     {  
  4.        public ActionResult Index()  
  5.         {  
  6.             ViewData["title"] = "Home/Content/Index";  
  7.             return View();  
  8.         }   }  
  9. public class ProductController : Controller  
  10.     {  
  11.         public ActionResult Index()  
  12.         {  
  13.             ViewData["title"] = "Home/Content/Index";  
  14.             return View();  
  15.         }}  
  16.     public class ContentController : Controller  
  17.     {  
  18.         public ActionResult Index()  
  19.         {  
  20.             ViewData["title"] = "Home/Content/Index";  
  21.             return View();  
  22.         }  
  23.     }}  
  24. namespace Valor.Asmyna.Areas.Home  
  25. {  
  26.     public class HomeController : Controller  
  27.     {  
  28.         public ActionResult Index()  
  29.         {  
  30.             ViewData["title"] = "Home/Home/Index";  
  31.             return View();  
  32.         }   }  
  33. public class ProductController : Controller{  
  34.        public ActionResult Index()  
  35.         {  
  36.             ViewData["title"] = "Home/Product/Index";  
  37.             return View();  
  38.         }    }  
  39.     public class ContentController : Controller  
  40.     {  
  41.         public ActionResult Index()  
  42.         {  
  43.             ViewData["title"] = "Home/Content/Index";  
  44.             return View();  
  45.         }  
  46.     }  

編譯之后訪問,各自分別為自己的Controller處理了

Home/Product

結果1

Website/Product

結果2

原文標題:使用mvc2里面的area讓網站更有條理

鏈接:http://www.cnblogs.com/tthxnz/archive/2009/11/12/1602097.html

【編輯推薦】

  1. 專訪微軟MVP衣明志:走進ASP.NET MVC 2框架開發
  2. 詳解ASP.NET MVC 2中強類型HTML輔助方法
  3. ASP.NET MVC 2 RC版全新發布 增強HTML控制
  4. 詳解ASP.NET MVC 2自定義驗證
  5. 詳解ASP.NET MVC對表進行通用的增刪改
責任編輯:彭凡 來源: 博客園
相關推薦

2010-10-12 09:52:02

ASP.NET MVC

2010-12-07 09:38:15

ASP.NET MVC

2009-10-29 09:15:32

ASP.NET MVCDropDownLis

2010-09-15 09:18:21

ASP.NET MVC

2010-10-08 14:32:32

ASP.NET MVCNuPack

2011-04-14 09:19:22

ASP.NET MVC

2010-03-19 09:17:16

ASP.NET MVC

2010-01-18 09:25:33

ASP.NET MVC

2009-11-24 15:11:21

ASP.NET MVC

2014-08-26 09:22:40

ASP.NET MVCRouting

2011-01-15 23:07:59

2009-09-10 09:50:47

ASP.NET MVC

2009-09-18 10:20:26

PRG數據驗證

2009-07-22 13:16:04

MvcAjaxPaneASP.NET MVC

2009-07-31 12:43:59

ASP.NET MVC

2009-07-24 13:20:44

MVC框架ASP.NET

2009-12-01 09:30:34

ASP.NET MVC

2009-07-20 16:44:56

ASP.NET MVCIValueProvi

2010-10-09 08:41:40

Mono 2.8

2015-06-18 17:37:19

ASP.NET
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 色黄网站| 欧美精品tv | 天天干.com| 天天综合久久 | 正在播放国产精品 | 浴室洗澡偷拍一区二区 | 精品久久99 | 国产一区二区欧美 | 91久久久久 | 亚洲精品91 | 国产精品福利久久久 | 久草资源在线视频 | 国产良家自拍 | 日韩精品二区 | 久久99精品国产 | 欧美黄色片在线观看 | 国产精品久久久久久影视 | 日韩欧美第一页 | 国产99久久久久 | 国产精品久久久久久久久久久久午夜片 | 午夜影院中文字幕 | 精品欧美一区二区在线观看欧美熟 | 欧洲性生活视频 | 伊人网在线看 | 日韩在线观看网站 | 欧美三级在线 | 国产成人在线视频免费观看 | 国产精品久久一区二区三区 | 日韩国产在线观看 | 久久亚洲国产精品日日av夜夜 | 日韩最新网址 | 天天爽综合网 | 超碰成人av | 久久一区二区三区四区五区 | 超碰97人人人人人蜜桃 | 日日日日日日bbbbb视频 | 欧美黑人体内she精在线观看 | 免费成人毛片 | 久久久国产网站 | 亚洲国产免费 | 992人人草|