WEB开发网
开发学院WEB开发ASP.NET ASP.NET MVC路由扩展:路由映射 阅读

ASP.NET MVC路由扩展:路由映射

 2012-03-26 11:39:19 来源:WEB开发网   
核心提示: }具体的路由映射依然定义在添加的Global.asax文件中,如下面的代码片断所示,ASP.NET MVC路由扩展:路由映射(4),我们通过调用RouteTable的Routes属性的MapRoute方法注册了一个采用“{areacode}/{days}”作为URL模板的路由对象,并指定了
   }
具体的路由映射依然定义在添加的Global.asax文件中。如下面的代码片断所示,我们通过调用RouteTable的Routes属性的MapRoute方法注册了一个采用“{areacode}/{days}”作为URL模板的路由对象,并指定了默认变量、约束和命名空间列表。
 
   1: public class Global : System.Web.HttpApplication
   2: {
   3:     protected void Application_Start(object sender, EventArgs e)
   4:     {
   5:         object defaults = new { areacode = "010", days = 2, defaultCity="BeiJing", defaultDays=2};
   6:         object constraints = new { areacode = @"0\d{2,3}", days = @"[1-3]{1}"};
   7:         string[] namespaces = new string[] { "Artech.Web.Mvc", "Artech.Web.Mvc.Html" };
   8:         RouteTable.Routes.MapRoute("default", "{areacode}/{days}", defaults, constraints, namespaces);
   9:     }              
  10: }
如果我们现在在浏览器中访问Default.aspx页面,会得到下图所示的结果,从中我们可以得到一些有用的信息:
 
与调用RouteCollection的MapPateRoute方法进行路由映射不同的是,这个得到的RouteData对象的RouteHandler属性是一个System.Web.Mvc.MvcRouteHandler对象。
在MapRoute方法中通过defaults参数指定的两个与URL匹配无关的变量(defaultCity=BeiJing;defaultDays=2)体现在RouteData的Values属性中。这意味着如果我们没有在URL模板中为Controller和Action的名称定义相应的变量({controller}和{action}),也可以将它们定义成默认变量。
DataTokens属性中包含一个Key值为Namespaces值为字符数组的元素,我们不难猜出它对应着我们指定的命名空间列表。
 
 
三、基于Area的路由映射
对于一个较大规模的Web应用,我们可以从功能上通过Area将其划分为较小的单元。每个Area相当于一个独立的子系统,具有一套包含Models、Views和Controller在内的目录结构和配置文件。一般来说,每个Area具有各自的路由规则(URL模版上一般会体现Area的名称),而基于Area的路由映射通过AreaRegistration进行注册。
 
AreaRegistration与AreaRegistrationContext
基于Area的路由映射通过AreaRegistration进行注册。如下面的代码片断所示,AreaRegistration是一个抽象类,抽象只读属性AreaName返回当前Area的名称,而抽象方法RegisterArea用于实现基于当前Area的路由注册。
 
   1: public abstract class AreaRegistration
   2: {    
   3:     public static void RegisterAllAreas();
   4:     public static void RegisterAllAreas(object state);
   5:  
   6:     public abstract void RegisterArea(AreaRegistrationContext context);
   7:     public abstract string AreaName { get; }

上一页  1 2 3 4 5 6 7 8  下一页

Tags:ASP NET MVC

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接