日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
詳解ASP.NETMVC2中的Area特性

在1月曾專訪過(guò)微軟MVP衣明志老師,主要話題就是ASP.NET MVC 2。其中我們?cè)劦紸rea特性,在這里特組織這篇文章供大家了解ASP.NET MVC 2中的Area。想學(xué)習(xí)更多ASP.NET MVC,請(qǐng)參考教程《ASP.NET MVC框架視頻教程

10年積累的成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有珠海免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

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

沒有Areas前相同問(wèn)題的處理

在mvc1.0時(shí)代,如果要將網(wǎng)站按目錄結(jié)構(gòu)來(lái)區(qū)分。例如

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

通常都是在Views下面建立若干個(gè)和Controller相對(duì)應(yīng)的目錄,然后在里面放置aspx頁(yè)面

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

這樣建立若干個(gè)目錄

其實(shí)這樣也沒什么不好,***不好的可能就是隨著業(yè)務(wù)的需要,結(jié)構(gòu)需求會(huì)越來(lái)越多,views目錄下面的文件夾越來(lái)越多,更或者你需要更細(xì)結(jié)構(gòu)的頁(yè)面路徑,例如:

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

當(dāng)然,你可以用UrlRouteing或者ViewEngine搞定這些問(wèn)題。但是毫無(wú)疑問(wèn),隨著網(wǎng)站的運(yùn)行日久,同一個(gè)Controller目錄下的文件會(huì)越來(lái)越多,對(duì)于同一個(gè)Controller下的ActionResult的命名和UrlRouting里面的維護(hù)帶來(lái)不小的麻煩。給管理帶來(lái)不方便【個(gè)人理解】。

現(xiàn)在出Areas之后,這個(gè)問(wèn)題有所緩解。還是如上的Url

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

可以使用mvc2.0新增的Area來(lái)解決這個(gè)問(wèn)題

建立項(xiàng)目

首先,用mvc2建立一個(gè)新項(xiàng)目,在網(wǎng)站根目錄下建立Areas文件夾,在Areas文件夾建立你要區(qū)分的目錄,例如本例的Website,然后繼續(xù)在Website目錄下增加Views目錄,繼續(xù)在views目錄下增加需要分類管理Controller目錄和建立aspx文件。使文件結(jié)構(gòu)形成

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

 

到原有默認(rèn)的views目錄將web.config復(fù)制到現(xiàn)在的新的views目錄,你甚至現(xiàn)在可以把原有的views目錄刪除掉

建立Areas區(qū)域UrlRouting

隨便找個(gè)地方,建立一個(gè)新的類,繼承AreaRegistration實(shí)現(xiàn)抽象類

修改Global.sas

 
 
 
 
  1. protected void Application_Start()  
  2.         {  
  3. AreaRegistration.RegisterAllAreas();  
  4. //注冊(cè)區(qū)域Url規(guī)則,注意先后順序  
  5. RegisterRoutes(RouteTable.Routes);  
  6.         } 

為區(qū)域頁(yè)面建立Controller類

為區(qū)域頁(yè)面建立Controller類沒什么區(qū)別,可以建立在另外一個(gè)外部類庫(kù)項(xiàng)目上,***需要注意的就是命名空間需要和注冊(cè)Area規(guī)則的類的命名空間的前導(dǎo)一致。我們知道,在不使用Areas的時(shí)候Controller是不受namespace約束的。也就是說(shuō)只要你有一個(gè)Controller名,而不管他在哪個(gè)命名空間下都是可以起作用的,如果我們?cè)诓煌拿臻g建立2個(gè)相同的Controller類名,編譯的時(shí)候不會(huì)出錯(cuò),但是運(yùn)行mvc網(wǎng)站的時(shí)候會(huì)提示存在2個(gè)相同的Controller類,系統(tǒng)不知道使用哪個(gè)。但是Areas卻有所限制,他一定要命名空間的前導(dǎo)和AreaRegistration類得命名空間相同。例如:我建立的AreaRegistration網(wǎng)站項(xiàng)目命名空間為Valor.Asmyna.Areas.Website然后我將Controller分開作為一個(gè)獨(dú)立的類庫(kù),如果我隨便寫一個(gè)命名空間空間,這個(gè)Controller對(duì)于Area里面的views是不起作用的,但是他卻對(duì)原始Views目錄的Controller起作用,只有將他的命名空間設(shè)置成Valor.Asmyna.Areas.Website.xxx.xxx的前導(dǎo)才起作用

 
 
 
 
  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,到瀏覽器測(cè)試一下看看

Area結(jié)構(gòu)完全一致會(huì)出現(xiàn)的問(wèn)題

我們繼續(xù)在Area目錄下增加一個(gè)Home目錄,在他的Veiws目錄下也增加三個(gè)相同的controller目錄

直接在剛才注冊(cè)Website AreaRegistration命名空間為他注冊(cè)一個(gè)Area規(guī)則,用默認(rèn)系默認(rèn)的Controller為Home.,

對(duì)2個(gè)路徑進(jìn)行訪問(wèn):

/Website/Product

/Home/Product

這個(gè)時(shí)候controller對(duì)于這2個(gè)area目錄的views都能起作用。在頁(yè)面打印得到的結(jié)果一致

顯然這樣是不對(duì)的.由此我們剛才想到Area的Controller的選擇名命名空間限制問(wèn)題。那我們他們分開來(lái)注冊(cè)看看。修改Home區(qū)域的AreaRegistration的命名空間和在為HomeArea建立一個(gè)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.     }  

編譯之后訪問(wèn),各自分別為自己的Controller處理了

Home/Product

Website/Product


分享題目:詳解ASP.NETMVC2中的Area特性
分享URL:http://www.dlmjj.cn/article/dpgphss.html