您好,登錄后才能下訂單哦!
這篇文章主要講解了“ASP.NET MVC 2中的Area特性是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“ASP.NET MVC 2中的Area特性是什么”吧!
沒有Areas前相同問題的處理
在mvc1.0時代,如果要將網站按目錄結構來區分。例如
Website/Index Admin/ Index User/ Index ……/……
通常都是在Views下面建立若干個和Controller相對應的目錄,然后在里面放置aspx頁面
Views\Website\Index Views\Admin\Index Views\User\Index Views\.......\.......
這樣建立若干個目錄
其實這樣也沒什么不好,***不好的可能就是隨著業務的需要,結構需求會越來越多,views目錄下面的文件夾越來越多,更或者你需要更細結構的頁面路徑,例如:
Website/Product/Index Website/Catalog/Index Website/Contect/Index
當然,你可以用UrlRouteing或者ViewEngine搞定這些問題。但是毫無疑問,隨著網站的運行日久,同一個Controller目錄下的文件會越來越多,對于同一個Controller下的ActionResult的命名和UrlRouting里面的維護帶來不小的麻煩。給管理帶來不方便【個人理解】。
現在出Areas之后,這個問題有所緩解。還是如上的Url
Website\Product\Index Website\Catalog\Index Website\Order\Index Website\Contact\Index
可以使用mvc2.0新增的Area來解決這個問題
建立項目
首先,用mvc2建立一個新項目,在網站根目錄下建立Areas文件夾,在Areas文件夾建立你要區分的目錄,例如本例的Website,然后繼續在Website目錄下增加Views目錄,繼續在views目錄下增加需要分類管理Controller目錄和建立aspx文件。使文件結構形成
Areas\Website\Views\Product Areas\Website\Views\ Catalog Areas\Website\Views\ Order Areas\Website\Views\ Contact
到原有默認的views目錄將web.config復制到現在的新的views目錄,你甚至現在可以把原有的views目錄刪除掉
建立Areas區域UrlRouting
隨便找個地方,建立一個新的類,繼承AreaRegistration實現抽象類
修改Global.sas
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); //注冊區域Url規則,注意先后順序 RegisterRoutes(RouteTable.Routes); }
為區域頁面建立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的前導才起作用
namespace Valor.Asmyna.Areas.Website { public class HomeController : Controller { public ActionResult Index() { ViewData["title"] = "Website/Home/Index"; return View(); } } public class ProductController : Controller { public ActionResult Index() { ViewData["title"] = "Website/Product/Index"; return View(); } } public class ContentController : Controller { public ActionResult Index() { ViewData["title"] = "Website/Content/Index"; return View(); } } }
Ok,到瀏覽器測試一下看看
Area結構完全一致會出現的問題
我們繼續在Area目錄下增加一個Home目錄,在他的Veiws目錄下也增加三個相同的controller目錄
直接在剛才注冊Website AreaRegistration命名空間為他注冊一個Area規則,用默認系默認的Controller為Home.,
對2個路徑進行訪問:
/Website/Product
/Home/Product
這個時候controller對于這2個area目錄的views都能起作用。在頁面打印得到的結果一致
顯然這樣是不對的.由此我們剛才想到Area的Controller的選擇名命名空間限制問題。那我們他們分開來注冊看看。修改Home區域的AreaRegistration的命名空間和在為HomeArea建立一個Controller類,使他們的命名空間一致。這次我們用Valor.Asmyna.Areas.Website
namespace Valor.Asmyna.Areas.Home{ public class HomeController : Controller { public ActionResult Index() { ViewData["title"] = "Home/Content/Index"; return View(); } } public class ProductController : Controller { public ActionResult Index() { ViewData["title"] = "Home/Content/Index"; return View(); }} public class ContentController : Controller { public ActionResult Index() { ViewData["title"] = "Home/Content/Index"; return View(); } }} namespace Valor.Asmyna.Areas.Home { public class HomeController : Controller { public ActionResult Index() { ViewData["title"] = "Home/Home/Index"; return View(); } } public class ProductController : Controller{ public ActionResult Index() { ViewData["title"] = "Home/Product/Index"; return View(); } } public class ContentController : Controller { public ActionResult Index() { ViewData["title"] = "Home/Content/Index"; return View(); } } }
編譯之后訪問,各自分別為自己的Controller處理了
Home/Product
Website/Product
感謝各位的閱讀,以上就是“ASP.NET MVC 2中的Area特性是什么”的內容了,經過本文的學習后,相信大家對ASP.NET MVC 2中的Area特性是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。