ASP.NET?MVC實現(xiàn)區(qū)域路由
一、區(qū)域路由
為了管理網(wǎng)站中大量的文件,在ASP.NET MVC 2.0版本中引入了一個新概念:區(qū)域(Area)。
有了區(qū)域以后,可以讓我們的項目不至于太復(fù)雜而導(dǎo)致管理混亂。每個模塊的頁面都放入相應(yīng)的區(qū)域內(nèi)進(jìn)行管理很方便??聪旅娴慕貓D:
上圖中有兩個模塊:一個是User模塊,另一個是Product模塊,所有關(guān)于這兩個模塊的Controller、Model、View都放入各自的模塊內(nèi)。而且從上圖中可以看出:區(qū)域的功能就類似于一個小的MVC項目,雖然項目小,但是有自己的控制器、模型、視圖和路由設(shè)置。
區(qū)域?qū)嶋H上就是應(yīng)用程序內(nèi)部的一個MVC結(jié)構(gòu),一個應(yīng)用程序可能包含若干個MVC結(jié)構(gòu)(區(qū)域)。例如:一個大型的電子商務(wù)網(wǎng)站可能分為若干個區(qū)域,這些區(qū)域分別代表產(chǎn)品,用戶等模塊,每個區(qū)域表示應(yīng)用程序的一個獨立功能。
二、示例程序
上面講解了區(qū)域路由的概念及結(jié)構(gòu),下面從頭開始創(chuàng)建一個區(qū)域路由來演示如何創(chuàng)建區(qū)域路由。
1、新建區(qū)域路由
在項目上右鍵添加,然后選擇區(qū)域,如圖所示:
然后輸入?yún)^(qū)域名稱:AreaAdmin,如下圖所示:
點擊確定,然后區(qū)域創(chuàng)建完成:
2、注冊區(qū)域路由
2.1、區(qū)域路由文件
在MVC中添加一個區(qū)域以后,會默認(rèn)幫我們注冊這個區(qū)域的路由規(guī)則。例如:我們剛才創(chuàng)建的AreaAdmin區(qū)域,然后幫我們生成了AreaAdminAreaRegistration.cs文件,其代碼如下:
using System.Web.Mvc; namespace MVCStudyDemo.Areas.AreaAdmin { public class AreaAdminAreaRegistration : AreaRegistration { public override string AreaName { get { return "AreaAdmin"; } } public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "AreaAdmin_default", "AreaAdmin/{controller}/{action}/{id}", new { action = "Index", id = UrlParameter.Optional } ); } } }
上面的代碼中,RegisterArea是實現(xiàn)注冊路由的方法,通過把一個路由添加到區(qū)域路由集合中實現(xiàn)。
2.2、全局注冊區(qū)域路由
上面的文件只是把路由添加到了區(qū)域路由集合中,要想使用區(qū)域路由,還需要進(jìn)行全局注冊區(qū)域路由,全局注冊區(qū)域路由需要在Global.asax中注冊,代碼如下:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Optimization; using System.Web.Routing; namespace MVCStudyDemo { public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { // 注冊全局區(qū)域路由 AreaRegistration.RegisterAllAreas(); // 注冊Filter FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); // 注冊路由 RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); } } }
注意:AreaRegistration.RegisterAllAreas()在RouteConfig.RegisterRoutes(RouteTable.Routes)的前面,這一點很關(guān)鍵,最好是不要改變這個順序。MVC路由系統(tǒng)是按照注冊路由的先后順序來匹配的,這里AreaRegistration.RegisterAllAreas()在前面表示MVC路由系統(tǒng)會先去匹配Area中的路由規(guī)則,如果改變了這個順序可能會找到錯誤的Controller。
三、測試區(qū)域路由
新建一個名為AdminHome的Controller和View,創(chuàng)建方式和使用普通MVC創(chuàng)建Controller和View一樣,修改Index對應(yīng)的View視圖代碼如下:
@{ ViewBag.Title = "Index"; } <h2>這是AreaAdmin區(qū)域路由HomeController控制器里面的Index視圖頁面</h2>
瀏覽器運行效果如下:
這時在新建一個HomeController,對應(yīng)的Index視圖代碼如下
@{ ViewBag.Title = "Index"; } <h2>這是AreaAdmin區(qū)域路由HomeController控制器里面的Index視圖頁面</h2>
瀏覽器運行效果如下:
這時在訪問一下新建MVC項目時自帶的HomeController控制器的Index頁面,瀏覽器運行效果如下:
從上面的截圖中可以看出這時候在訪問就出錯了,因為程序中存在兩個HomeController,程序不知道要訪問哪個控制器,所以根據(jù)錯誤提示需要在區(qū)域路由里面添加namespace,區(qū)分一下兩個HomeController,區(qū)域路由中查看MapRoute的定義:
上面的代碼中可以看出:在MapRoute的重載函數(shù)中增加一個namespace即可區(qū)分不同的路由,修改RouteConfig后的路由規(guī)則如下:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; namespace MVCStudyDemo { /// <summary> /// 路由:將URL地址匹配到相應(yīng)Controller的Action方法 /// </summary> public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { // 忽略路由 正則表達(dá)式 表示以.axd結(jié)尾的URL地址被忽略掉 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); // 默認(rèn)路由 一般不擴展路由,使用默認(rèn)路由即可 // 這里使用的是命名參數(shù)的形式 把name,url,default去掉也可以 routes.MapRoute( // 路由名稱 name: "Default", // 匹配規(guī)則(正則表達(dá)式) url: "{controller}/{action}/{id}", // 默認(rèn)值 默認(rèn)controller是Home action方法是Index id是可空的 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } , // 添加命名空間 new string[] { "MVCStudyDemo" + ".Controllers" } ); } } }
這時在訪問HomeController下面的Index方法就可以正常訪問了:
到此這篇關(guān)于ASP.NET MVC實現(xiàn)區(qū)域路由的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- ASP.NET Core MVC學(xué)習(xí)教程之路由(Routing)
- 詳解ASP.NET Core MVC 源碼學(xué)習(xí):Routing 路由
- ASP.NET Core中使用默認(rèn)MVC路由的配置
- ASP.NET Core MVC 配置全局路由前綴
- 解讀ASP.NET 5 & MVC6系列教程(11):Routing路由
- 為ASP.NET MVC及WebApi添加路由優(yōu)先級
- asp.net mvc路由篇 如何找到 IHttpHandler方法介紹
- ASP.NET MVC3關(guān)于生成純靜態(tài)后如何不再走路由直接訪問靜態(tài)頁面
- ASP.NET?MVC中的路由原理與用法
相關(guān)文章
ASP.NET實現(xiàn)根據(jù)IP獲取省市地址的方法
這篇文章主要介紹了ASP.NET實現(xiàn)根據(jù)IP獲取省市地址的方法,主要基于QQwry.dat純真IP數(shù)據(jù)庫來實現(xiàn)這一功能,非常實用,需要的朋友可以參考下2014-10-10ASP.NET MVC5+EF6+EasyUI 后臺管理系統(tǒng)(81)-數(shù)據(jù)篩選(萬能查詢)實例
本篇文章主要介紹了ASP.NET MVC5+EF6+EasyUI 后臺管理系統(tǒng)(81)-數(shù)據(jù)篩選(萬能查詢) ,具有一定的參考價值,有興趣的可以了解一下。2016-12-12asp.net 在處理向該請求提供服務(wù)所需的配置文件時出錯
遭遇:“說明: 在處理向該請求提供服務(wù)所需的配置文件時出錯。請檢查下面的特定錯誤詳細(xì)信息并適當(dāng)?shù)匦薷呐渲梦募!卞e誤2010-03-03ASP.NET?MVC遍歷驗證ModelState的錯誤信息
這篇文章介紹了ASP.NET?MVC遍歷ModelState錯誤信息的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-09-09