ASP.NET MVC路由(四)

前言

在前面的篇幅中我们讲解路由系统在MVC中的运行过程以及粗略的原理,想必看过前面篇幅的朋友应该对路由有个概念性的了解了,本篇来讲解区域,在读完本篇后不会肯定的让你对区域有彻底的了解,但是会让你在以后对这部分知识掌握的路上夯上厚实的基础。

区域

在路由的起初在按照VS环境新建的MVC项目来讲的,今天区域也是按照这样的套路来讲。MSDN上说,在大型项目使用中被MVC划分为较小单元也就是区域,我没有使用过区域的经验,所以这篇只能讲解它的对象模型以及粗略的原理。

(没有MVC项目的新建一个)首先在MVC项目中,右键项目->添加->区域,然后在弹出的对话框中输入区域的名称,如图

点击添加后会发现在项目中出现这样的目录结构,如图:

暂时先不管这些目录结构的意思,先来看一下前面篇幅中说到的Global.asax文件中的MvcApplication类的Application_Start()方法中注册区域的代码:

 AreaRegistration.RegisterAllAreas();

RegisterAllAreas()方法就是注册所有区域的意思,如图所示过程:

在RegisterAllAreas()方法执行的时候内部会根据MVC-AreaRegistrationTypeCache.xml区域缓存文件来读取所缓存的所有区域类型(全部是实现AreaRegistration),如果缓存文件中为空,则会遍历当前系统所依赖的所有程序集搜寻AreaRegistration类型且写入到缓存文件。

并且返回一个类型集合,此时的类型集合中都是实现了AreaRegistration类型的实现类,在遍历每一个类型的时候都会引用传递的把当前系统的路由表RouteTable.Routes传递到新建对象AreaRegistrationContext(参数上下文对象)中,随后再调用基类AreaRegistration的抽象方法RegisterArea(),当然了这是框架中才这么实现的,而在实际情况中此处的基类AreaRegistration已经是上述示例中的AreaCaseAreaRegistration类型了。

到这里我们看一下AreaCaseAreaRegistration类型的内部实现:

     public class AreaCaseAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "AreaCase";
}
} public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"AreaCase_default",
"AreaCase/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
}

这里要说的是在RegisterArea()方法中的AreaRegistrationContext类型中的MapRoute()方法并不是RouteCollectionExtensions扩展类型中的方法,而是在此外面又包装了一层,此处的MapRoute()方法注册的路由对象中DataTokens属性值” area”索引下则是次路由所在的区域,也就是区域名称。

这个时候可以通过调试发现,区域中的路由也和程序中定义的路由一起被注册到了路由表中,说明区域也就是路由定义在物理文件上的划分,当然还有其它大的作用,本人暂时没有领悟到,有感了会第一时间和大家分享。

作者:金源

出处:http://www.cnblogs.com/jin-yuan/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面

ASP.NET MVC 路由(四)的更多相关文章

  1. ASP.NET MVC路由

    ASP.NET MVC路由(四) 前言 在前面的篇幅中我们讲解路由系统在MVC中的运行过程以及粗略的原理,想必看过前面篇幅的朋友应该对路由有个概念性的了解了,本篇来讲解区域,在读完本篇后不会肯定的让你 ...

  2. Asp.Net MVC 路由 - Asp.Net 编程 - 张子阳

    http://cache.baiducontent.com/c?m=9d78d513d98316fa03acd2294d01d6165909c7256b96c4523f8a9c12d522195646 ...

  3. ASP.NET MVC中有四种过滤器类型

    在ASP.NET MVC中有四种过滤器类型

  4. ASP.NET MVC 视图(四)

    ASP.NET MVC 视图(四) 前言 上篇对于利用IoC框架对视图的实现进行依赖注入,最后还简单的介绍一下自定义的视图辅助器是怎么定义和使用的,对于Razor语法的细节和辅助器的使用下篇会说讲到, ...

  5. ASP.NET MVC 路由(一)

    ASP.NET MVC路由(一) 前言 从这一章开始,我们即将进入MVC的世界,在学习MVC的过程中在网上搜索了一下,资料还是蛮多的,只不过对于我这样的初学者来看还是有点难度,自己就想看到有一篇引导性 ...

  6. ASP.NET MVC 路由(二)

     ASP.NET MVC路由(二) 前言 在上一篇中,提及了Route.RouteCollection对象的一些信息,以及它们的结构所对应的关系.按照处理流程走下来还有遗留的疑问没有解决这个篇幅就来讲 ...

  7. ASP.NET MVC 路由(三)

    ASP.NET MVC路由(三) 前言 通过前两篇的学习会对路由系统会有一个初步的了解,并且对路由系统中的Url规则有个简单的了解,在大家的脑海中也有个印象了,那么路由系统在ASP.NETMVC中所处 ...

  8. ASP.NET MVC 路由(五)

    ASP.NET MVC 路由(五) 前言 前面的篇幅讲解了MVC中的路由系统,只是大概的一个实现流程,让大家更清晰路由系统在MVC中所做的以及所在的位置,通过模糊的概念描述.思维导图没法让您看到路由的 ...

  9. ASP.NET MVC 过滤器(四)

    ASP.NET MVC 过滤器(四) 前言 前一篇对IActionFilter方法执行过滤器在框架中的执行过程做了大概的描述,本篇将会对IActionFilter类型的过滤器使用来做一些介绍. ASP ...

随机推荐

  1. Oracle中生成随机数的函数(转载)

    在Oracle中的DBMS_RANDOM程序包中封装了一些生成随机数和随机字符串的函数,其中常用的有以下两个: DBMS_RANDOM.VALUE函数 该函数用来产生一个随机数,有两种用法: 1. 产 ...

  2. tomcat实现域名访问步骤

    1.找到tomcat的主目录,进入conf文件夹,找到server.xml文件,并打开: 2.修改tomcat的监听端口为80端口: 3.将内容中的 localhost 替换成你想修改的IP地址或者域 ...

  3. web.xml文件加载顺序

    1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个Servl ...

  4. Git 创建本地仓库

    前面已经搭好环境了,现在我们缺的是一个管理版本控制的仓库.这次的实验是在电脑本地创建本地仓库.指定路径 默认的位置是在你所安装Git的目录下.Git的仓库你可以建在你电脑的任何目录下(最好不要包含有中 ...

  5. Windows安装程序 报错 “已安装了较新版本” 导致无法安装程序的解决方法

    打开注册表 HKEY_CURRENT_USER\Software\Microsoft\Installer\Products ,“查找”程序名称 如果有程序名和安装程序相同的 ,删除整个 项 ! 然后就 ...

  6. 1.2.1 OC概述

    本文并非最终版本,如想关注更新或更正的内容,详见文末的联系方式,如有疏忽和遗漏,欢迎指正. 本文相关目录:(链接为简书链接) ====================== 所属文集:1.2 Objec ...

  7. 基于ThinkPHP3的微信平台开发_1

    微信公众平台是个好东西,具体的就不说了,我直接说技术>_< 下图为目录结构一览: 微信开发 - 文件目录结构 平台功能: 此次开发的平台是面向多微信公众号.微信多公众号主(下面简称号主)的 ...

  8. QuanbenSoft Windows Runtime (Windows Store)Apps 应用及其框架总览

    Parrot Simple audio repeater for language learners http://www.windowsphone.com/en-au/store/app/parro ...

  9. DataTable转换为JSON数组

    最后的格式为:[{},{},...] StringBuilder DataTableToJSON(DataTable dt) { string columnName; StringBuilder bu ...

  10. Qgis连接Oracle

    CMake编译中选择编译Oracle一项以后,编译的qgis才会有连接Oracle数据库的功能. 编译qgis以后,可以通过添加矢量图层中选择Oracle数据库,或是添加Oracle空间图层,或是添加 ...