ASP.NET MVC路由
ASP.NET MVC路由(四)
前言
在前面的篇幅中我们讲解路由系统在MVC中的运行过程以及粗略的原理,想必看过前面篇幅的朋友应该对路由有个概念性的了解了,本篇来讲解区域,在读完本篇后不会肯定的让你对区域有彻底的了解,但是会让你在以后对这部分知识掌握的路上夯上厚实的基础。
区域
在路由的起初在按照VS环境新建的MVC项目来讲的,今天区域也是按照这样的套路来讲。MSDN上说,在大型项目使用中被MVC划分为较小单元也就是区域,我没有使用过区域的经验,所以这篇只能讲解它的对象模型以及粗略的原理。
(没有MVC项目的新建一个)首先在MVC项目中,右键项目->添加->区域,然后在弹出的对话框中输入区域的名称,如图

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

暂时先不管这些目录结构的意思,先来看一下前面篇幅中说到的Global.asax文件中的MvcApplication类的Application_Start()方法中注册区域的代码:
1 AreaRegistration.RegisterAllAreas();
RegisterAllAreas()方法就是注册所有区域的意思,如图所示过程:

在RegisterAllAreas()方法执行的时候内部会根据MVC-AreaRegistrationTypeCache.xml区域缓存文件来读取所缓存的所有区域类型(全部是实现AreaRegistration),如果缓存文件中为空,则会遍历当前系统所依赖的所有程序集搜寻AreaRegistration类型且写入到缓存文件。
并且返回一个类型集合,此时的类型集合中都是实现了AreaRegistration类型的实现类,在遍历每一个类型的时候都会引用传递的把当前系统的路由表RouteTable.Routes传递到新建对象AreaRegistrationContext(参数上下文对象)中,随后再调用基类AreaRegistration的抽象方法RegisterArea(),当然了这是框架中才这么实现的,而在实际情况中此处的基类AreaRegistration已经是上述示例中的AreaCaseAreaRegistration类型了。
到这里我们看一下AreaCaseAreaRegistration类型的内部实现:

1 public class AreaCaseAreaRegistration : AreaRegistration
2 {
3 public override string AreaName
4 {
5 get
6 {
7 return "AreaCase";
8 }
9 }
10
11 public override void RegisterArea(AreaRegistrationContext context)
12 {
13 context.MapRoute(
14 "AreaCase_default",
15 "AreaCase/{controller}/{action}/{id}",
16 new { action = "Index", id = UrlParameter.Optional }
17 );
18 }
19 }

这里要说的是在RegisterArea()方法中的AreaRegistrationContext类型中的MapRoute()方法并不是RouteCollectionExtensions扩展类型中的方法,而是在此外面又包装了一层,此处的MapRoute()方法注册的路由对象中DataTokens属性值” area”索引下则是次路由所在的区域,也就是区域名称。
这个时候可以通过调试发现,区域中的路由也和程序中定义的路由一起被注册到了路由表中,说明区域也就是路由定义在物理文件上的划分,当然还有其它大的作用,本人暂时没有领悟到,有感了会第一时间和大家分享。
ASP.NET MVC路由的更多相关文章
- ASP.NET MVC 路由(一)
ASP.NET MVC路由(一) 前言 从这一章开始,我们即将进入MVC的世界,在学习MVC的过程中在网上搜索了一下,资料还是蛮多的,只不过对于我这样的初学者来看还是有点难度,自己就想看到有一篇引导性 ...
- ASP.NET MVC 路由(二)
ASP.NET MVC路由(二) 前言 在上一篇中,提及了Route.RouteCollection对象的一些信息,以及它们的结构所对应的关系.按照处理流程走下来还有遗留的疑问没有解决这个篇幅就来讲 ...
- ASP.NET MVC 路由(三)
ASP.NET MVC路由(三) 前言 通过前两篇的学习会对路由系统会有一个初步的了解,并且对路由系统中的Url规则有个简单的了解,在大家的脑海中也有个印象了,那么路由系统在ASP.NETMVC中所处 ...
- ASP.NET MVC 路由(四)
ASP.NET MVC路由(四) 前言 在前面的篇幅中我们讲解路由系统在MVC中的运行过程以及粗略的原理,想必看过前面篇幅的朋友应该对路由有个概念性的了解了,本篇来讲解区域,在读完本篇后不会肯定的让你 ...
- ASP.NET MVC 路由(五)
ASP.NET MVC 路由(五) 前言 前面的篇幅讲解了MVC中的路由系统,只是大概的一个实现流程,让大家更清晰路由系统在MVC中所做的以及所在的位置,通过模糊的概念描述.思维导图没法让您看到路由的 ...
- Asp.Net MVC 路由 - Asp.Net 编程 - 张子阳
http://cache.baiducontent.com/c?m=9d78d513d98316fa03acd2294d01d6165909c7256b96c4523f8a9c12d522195646 ...
- AngularJS html5Mode与ASP.NET MVC路由
AngularJS html5Mode与ASP.NET MVC路由共存 前言 很久之前便听说AngularJS,非常酷,最近也比较火,我也在持续关注这个技术,只是没有认真投入学习.前不久公司找我们部门 ...
- Asp.Net MVC路由调试好帮手RouteDebugger
Asp.Net MVC路由调试好帮手RouteDebugger 1.获取方式 第一种方法: 在程序包控制台中执行命令 PM> Install-Package routedebugger 安装成功 ...
- ASP.NET MVC路由(5)
ASP.NET MVC路由(五) 前言 前面的篇幅讲解了MVC中的路由系统,只是大概的一个实现流程,让大家更清晰路由系统在MVC中所做的以及所在的位置,通过模糊的概念描述.思维导图没法让您看到路由的实 ...
随机推荐
- jquery初步总结
1.$(document).ready()方法和window.onload差分法 为页元件的正确操作,我们需要把操作元件JS编写的代码$(document).ready()(Jquery)或windo ...
- 国产与第三方库FFmpeg SDK
一个.编译并安装第三方库 1. libfaac # tar -zxvf faac-1.28.tar.gz # cd faac-1.28 # ./configure --prefix=/opt/YOUR ...
- 【剑指offer】数字数组中只出现一次(2)
转载请注明出处:http://blog.csdn.net/mmc_maodun/article/details/27800577 题目:一个int数组中有三个数字a.b.c仅仅出现一次,其它数字都出现 ...
- iOS 8中CLLocationManager及MKMapView showUserLocation失败的解决的方法
用XCode 6编译的原来XCode 5.1.1写的程序时,发现原来写的CLLocationManager定位的代码以及MKmapView的showUserLocation失效.查了一下,XCode ...
- Redis集群环境安装指南
环境 RHLinux-6.4-64-EN, 红帽6.4 64位,英文正式公布版. Redis3.0.0 redis2.x版本号还不支持集群,3.0版本号将会支持,如今3.0版本号还在开发中,如今是be ...
- Js 对象添加属性
var arr = new Array(); arr[0] = jQuery("#data1").val(); var obj = {}; obj.y='abc'; arr.pus ...
- 一个JavaWeb项目开发总结
一.学会如何读一个JavaWeb项目源代码 步骤:表结构->web.xml->mvc->db->spring ioc->log->代码 先了解项目数据库的表结构,这 ...
- PHP_零基础学php_3PHP函数、传参函数、默认参数、函数返回值
<?php function say_hello() //无参数 { $name="tang"; echo "hello,".$name; echo &q ...
- Codeforces 363A Soroban
模拟算盘 #include<bits/stdc++.h> using namespace std; int main() { char s[20]; scanf("%s" ...
- Java利用jcifs集成AD域用户认证
近期一段时间发现AD这东西老火了,尤其是涉及到安全这一方面的,所以AD域用户认证成了如今网络安全方面的产品必备!这里就简单的分享一下,Java通过jcifs集成AD域用户实现认证,以实现网络安全! 我 ...