asp.net MVC 模拟实现与源码分析-第一节

本文要实现的东东是什么:

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

涉及到的知识点:mvc源码 路由 razor引擎等。

适合人群:接触mvc有段时间了,但是想深入了解的人。高手就算了……

首先新建一个新项目:

建完之后项目是空的:

因为web项目的入口是Global.asax。所以,我们也新建一个:

F5运行程序

果然进来了,这些是前提,方便后续阅读

1.然后我们想访问Home下面的Index。url为http://localhost:11673/Home/Test.html

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

1.1.那么第一个需要讲的便是路由,通过路由规则来改变指向。看下mvc的代码是这样写的,这里便是mvc路由规则了

想用路由,首先要引入System.Web.Routing.dll

然后在Application_Start中添加路由映射的如下代码,写法如下:

你也许会说为啥不跟mvc的一样使用MapRoute啊?其实mvc对Route进行了扩展(使用扩展方法)。所以在不引入MVC库的情况下,是无法使用的。

具体源码在:System.Web.Mvc的RouteCollectionExtensions下面,有意者可前去查看。我们后续还要参照这源码。先贴出一小段

那么下面我们来访问:http://localhost:11673/Home/Test

出错了,说没有提供".html"为后缀名的提供程序。

需要配置一下web.congfig,指定处理程序

然后再次运行:

果然没错,看着像个mvc的访问方式了,放松一下^

当时你会说,这只是个静态文件啊。如果运行到这里之前还要执行好多逻辑代码呢

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

那我们试试如何让它指向一个Handle程序,看看参数提示:

这里要注意route中接收IRouteHandle参数

那么我们就写一个,其实IRouteHandle也就是返回一个IHttpHandler。微软应该是为了扩展性,又加了这么个东西

具体实现代码如下:

F5运行:

果然可以啊……

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

其实处理过程跟我们是一样的……

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

那么我们就要引入Razor引擎了,引入dll:System.Web.Razor

请注意ProcessRequest中的处理过程。通过razor引擎编译html代码,注意Razor.Parse第一个参数为:字符串内容,第二个参数为传入的Model。

所以输出结果为:"欢迎你 test"

F5运行下看看:

那么再来进一步处理,在后台写个Students集合,绑定到指定的RazorTest.html页面。

注意这次我们是跟一个页面进行数据绑定了。是不是越来越像了。看看结果,确实像所想的那样

好吧,就到这里吧。也是越说越多的,越深入就会越来越深入的(需要源码的请索要)。闲的没事,还是写写博客吧……下节继续吧!

时间: 2024-10-10 02:32:32

asp.net MVC 模拟实现与源码分析-第一节的相关文章

17+个ASP.NET MVC扩展点,含源码{转}

1.自定义一个HttpModule,并将其中的方法添加到HttpApplication相应的事件中!即:创建一个实现了IHttpmodule接口的类,并将配置WebConfig.在自定义的HttpModule中,可以将一个方法注册到HttpApplication的任意一个事件中,在之后执行HttpApplication一些列事件时,按照事件的顺序(事件又按照添加方法先后的顺序)执行注册在事件中的方法! namespace MvcStore.Models { public class Excute

Android 开源项目源码分析第一期正式发布

由 Trinea 发起.几十名 Android 开发者参与的Android 开源项目源码分析第一期正式发布. 从简介.总体设计.流程图.详细设计全方面分析开源库源码,第一期包括 10 个著名开源库及 5 个公共技术点的全面介绍. 分析文档 作者 Volley 源码解析 grumoon Universal Image Loader 源码分析 huxian99 Dagger 源码解析 扔物线 EventBus 源码解析 Trinea xUtils 源码解析 Caij ViewPagerindicat

S5PV210-uboot源码分析-第一阶段

uboot源码分析1-启动第一阶段 1.starts.S是我们uboot源码的第一阶段: 从u-boot.lds链接脚本中也可以看出start.S是我们整个程序的入口处,怎么看出的呢,因为在链接脚本中有个ENTRY(_start)声明了_start是程序的入口.所以_start符号所在的文件,就是我们整个程序的起始文件,_start所在处的代码就是我们整个程序的起始代码. 2.我们知道了程序的入口是_start这个符号,但是却不知道是在哪一个文件中,所以要SI进行查找搜索,点击SI的大R进行搜索

LevelDB源码分析-第一印象

leveldb是google开源的nosql数据库,被很多人推荐,因为良好的C++代码格式,咱们试图来分析一下吧 从github下载源码,代码量不是很大,而且目录结构也很清晰,咱们先写一下入门程序,来熟悉一下基本用法 leveldb::DB* db; leveldb::Options options; options.create_if_missing = true; leveldb::Status status = leveldb::DB::Open(options,"/tmp/testdb&

Spring MVC请求处理流程及源码分析

从接受请求到返回响应,Spring MVC框架的众多组件都伸胳膊挽袖子行动起来,各司其职,有条不紊地完成份内的工作.在整个框架中,DispatcherServlet处于核心的位置,它负责协调和组织不同组件,共同完成请求响应的工作.和大多数Web MVC框架一样,Spring MVC通过一个前端Servlet处理器接收所有的请求,并将具体工作委托给其它组件进行具体的处理,DispatcherServlet就是 Spring MVC的前端Servlet处理器.下面我们对Spring MVC处理请求的

hdfs源码分析第一弹

1. hdfs定义 HDFS is the primary distributed storage used by Hadoop applications. A HDFS cluster primarily consists of a NameNode that manages the file system metadata and DataNodes that store the actual data. 2. hdfs架构 3. hdfs实例 作为文件系统,文件的读写才是核心: /** *

jquery2源码分析系列目录

学习jquery的源码对于提高前端的能力很有帮助,下面的系列是我在网上看到的对jquery2的源码的分析.等有时间了好好研究下.我们知道jquery2开始就不支持IE6-8了,从jquery2的源码中可以学到很多w3c新的标准( 如html5,css3,ECMAScript).原文地址是:http://www.cnblogs.com/aaronjs/p/3279314.html 关于1.x.x版的jquery源码分析系列,本博客也转载了一个地址http://www.cnblogs.com/jav

[转]jQuery源码分析系列

文章转自:jQuery源码分析系列-Aaron 版本截止到2013.8.24 jQuery官方发布最新的的2.0.3为准 附上每一章的源码注释分析 :https://github.com/JsAaron/jQuery 正在编写的书 - jQuery架构设计与实现 本人在慕课网的教程(完结) jQuery源码解析(架构与依赖模块) 64课时 jQuery源码解析(DOM与核心模块)64课时 jQuery源码分析目录(完结) jQuery源码分析系列(01) : 整体架构 jQuery源码分析系列(

【.NET Core项目实战-统一认证平台】第八章 授权篇-IdentityServer4源码分析

[.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章我介绍了如何在网关上实现客户端自定义限流功能,基本完成了关于网关的一些自定义扩展需求,后面几篇将介绍基于IdentityServer4(后面简称Ids4)的认证相关知识,在具体介绍ids4实现我们统一认证的相关功能前,我们首先需要分析下Ids4源码,便于我们彻底掌握认证的原理以及后续的扩展需求. .netcore项目实战交流群(637326624),有兴趣的朋友可以在群里交流讨论. 一.Ids4文档及源码 文档地址 http:/