asp.net MVC 模拟实现与源码分析

前言

本文流程#1:

  从一个空项目->模拟实现一个从/Home/Test形式的URL敲入->后台逻辑处理->传入后台model参数->调用razor引擎->前台展现html

涉及到的知识点#2:

  mvc源码 路由 razor引擎等。web

适合人群#3:

  接触mvc有段时间了,可是想深刻了解的人。高手就算了mvc

一.新建一个空项目:

 
由于web项目的入口是  Global.asax 。因此,咱们也新建一个:
 
F5运行程序
果真进来了,这些是前提,方便后续阅读
 

二.访问路径(模拟与MVC一致)

若是咱们想访问Home下面的Index。url为http://localhost:11673/Home/Test.html工具

那么首先作的就是把这个url改为与mvc访问方式一致的,如http://localhost:11673/Home/Testurl

那么第一个须要讲的即是路由,经过路由规则来改变指向。

看下mvc的代码是这样写的,这里即是mvc路由规则了spa

想用路由,首先要引入 System.Web.Routing.dll
 
而后在 Application_Start中添加路由映射的以下代码,写法以下:
 
你也许会说为啥不跟mvc的同样使用MapRoute啊?其实mvc对Route进行了扩展(使用扩展方法)。因此在不引入MVC库的状况下,是没法使用的。
具体源码在:System.Web.Mvc的RouteCollectionExtensions下面,有意者可前去查看。咱们后续还要参照这源码。先贴出一小段

那么下面咱们来访问: http://localhost:11673/Home/Test 3d

 
出错了,说没有提供 ".html"  为后缀名的提供程序。
 
须要配置一下  web.congfig ,指定处理程序
 
 
而后再次运行:
 
 
当时你会说,这只是个静态文件啊。若是运行到这里以前还要执行好多逻辑代码呢
 

那么首先想到的是转向一个"通常处理程序"通常处理程序执行逻辑,而后拼装html内容,再返回给前台。

那咱们试试如何让它指向一个Handle程序,看看参数提示:
这里要注意 route中接收 IRouteHandle参数
那么咱们就写一个,其实 IRouteHandle也就是返回一个 IHttpHandler。微软应该是为了扩展性,又加了这么个东西
具体实现代码以下:
F5运行:
果真能够啊……

好了,咱们去看看MVC是咋处理的,请看mvc的RouteConfig,并进入源码.请顺着箭头看。本人装了自动反编译工具,因此看源码很方便htm

 
其实处理过程跟咱们是同样的……
 

那么你又会问了,人家想要用Razor视图啊。和后台数据绑定多帅啊^_^……

 
那么咱们就要引入Razor引擎了,引入dll: System.Web.Razor
请注意ProcessRequest中的处理过程。经过razor引擎编译html代码,注意Razor.Parse第一个参数为:字符串内容,第二个参数为传入的Model。
因此输出结果为:"欢迎你 test"
F5运行下看看:
 
那么再来进一步处理,在后台写个Students集合,绑定到指定的RazorTest.html页面。
 注意此次咱们是跟一个页面进行数据绑定了。是否是愈来愈像了。  看看结果,确实像所想的那样
 
 
 
好吧,就到这里吧。也是越说越多的,越深刻就会愈来愈深刻的(须要源码的请索要)。闲的没事,仍是写写博客吧……下节继续吧!
相关文章
相关标签/搜索