随笔分类 - MVC
摘要:我们知道在ASP.NET MVC中,在Action方法上应用ActionFilter过滤法时,它的执行流程如下图:这个功能看起来很一般麽,可是实现功能的代码吊炸天(嘿嘿,要班门弄斧了,大神绕行吧!),卡忙北鼻...由于在ASP.NET MVC中其功能涉及的代码太多,看起来太乱,下面就通过一个例子重点来介绍下这段吊爆的代码!例子的环境是这样的:1、有这么一个接口IFilterFunction,其中定义了两个方法! public interface IFilterFunction { void Before(); void After(); }2、一个...
阅读全文
摘要:这里特别感谢swagon提到了Displaymodeprovider,所以才有了本篇博客,也使我对【View的呈现】中寻找视图页的过程有了清晰的认识!前戏在MVC中,执行完Action之后,会返回一个ActionResult对象,之后再执行该对象的ExecuteResult方法,这也就是【View的呈现】的入口!【View的呈现】包括了:根据模版去寻找请求的视图页、编译视图页、再执行视图页的内容。本篇就来介绍寻找视图页的详细过程,其中涉及到了MVC 4的一个新特性--“手机视图页”public abstract class ViewResultBase : ActionResult{ p...
阅读全文
摘要:1、自定义一个HttpModule,并将其中的方法添加到HttpApplication相应的事件中!即:创建一个实现了IHttpmodule接口的类,并将配置WebConfig。 在自定义的HttpModule中,可以将一个方法注册到HttpApplication的任意一个事件中,在之后执行Htt...
阅读全文
摘要:概述 在ASP.NET MVC中,对于Action中得到的ActionResult如果是一个ViewResult对象,那么在进行View呈现时,则会先执行_ViewStart.cshtml,然后再去执行被请求的视图页,但是如果在控制器的Action中得到的ActionResult是一个PartialViewResult对象,那么在进行View呈现时,则不会执行_ViewStart.cshtml。举例验证例如:控制器代码如下: public class HomeController : Controller { public ActionResult Index() ...
阅读全文
摘要:问题在视图页中@Html.xxx(...)是什么?如何被执行?如下图所示: 解疑视图页中@Html.xxx(...)涉及的内容有:视图页被编译后的类继承自WebViewPage:WebViewPage:WebPageBase:WebPageRenderingBase:WebPageExecutingBase在进行View呈现过程中,创建视图页对象实例,此时 初始化了一个HtmlHelper对象,并赋值给其父类的一个名为Html的属性,@Html.xxx(...)中的Html就是该属性视图页中的@Html.xxx(...),经过编译之后,则变成该视图页对象Execute方法中的一段代码,即:t.
阅读全文
摘要:本节将接着《白话学习MVC(九)View的呈现一》来继续对ViewResult的详细执行过程进行分析!9、ViewResult ViewResult将视图页的内容响应给客户端! 由于ViewResult的View呈现过程比较复杂,在此先大致描述一下整个流程:获取视图引擎,默认有两个:ASPX引擎、Razor引擎。根据视图页名称,通过视图引擎去检查是否存在对应的视图页,如果存在,则创建视图对象。如果不存在,则将所有视图引擎寻找过的路径作为异常返回。创建视图对象之后,处理视图页中的内容(先处理_ViewStart.cshtml,之后再处理相应的试图页)。例如:TempData、Html.XXX..
阅读全文
摘要:一、概述 本节来看一下ASP.NET MVC【View的呈现】的内容,View的呈现是在Action执行之后进行,Action的执行生成一个ActionResult,【View的呈现】的功能就是:通过InvokeActionResult方法对【Action的执行】中生成的ActionResult进行处理。(ActionResult泛指那些继承自抽象类System.Web.Mvc.ActonResult的类的实例) 为了会纵观【View的呈现】在全局中的位置,下面我们再来回顾下处理请求的整个流程:在此系列开篇的时候介绍了MVC的生命周期, 对于ASP.NET和ASP.NET MVC,都是将相..
阅读全文
摘要:一、概述 上篇博文《白话学习MVC(七)Action的执行一》介绍了ASP.NET MVC中Action的执行的简要流程,并且对TempData的运行机制进行了详细的分析,本篇来分析上一篇中遗留的【3-2、ActionInvoker.InvokeAction(ControllerContext, actionName)】部分的内容,其中包含了Action的执行、过滤器的执行、View的呈现(下节介绍)。public abstract class Controller : ControllerBase, IActionFilter, IAuthorizationFilter, IDisposa.
阅读全文
摘要:一、概述 在此系列开篇的时候介绍了MVC的生命周期, 对于请求的处理,都是将相应的类的方法注册到HttpApplication事件中,通过事件的依次执行从而完成对请求的处理。对于MVC来说,请求是先 经过路由系统,然后由一个MvcHandler来处理的,当请求到来时,执行此MvcHandler的ProcessRequest方法(因为已将 MvcHandler类的ProcessRequest方法注册到HttpApplication的事件中,所以事件的执行就触发了此方法)。详细请看之前介绍MVC生命周期的两篇博客。 下面我们就以MVC声明周期为主线,来分析下MVC源码public class ..
阅读全文
摘要:一、什么是模型绑定? 模型绑定存在的意义就是为Action的参数提供值,例如:如下表单中提交了数据,那么Action(即:Index)的参数Id,Name的值就是表单中对应的name属性相同的值,而表单提交的值是如何赋值给Action的参数的呢?模型绑定就是来完成从用户提交的请求中提取数据,并赋值给Action的参数。此例是从表单中的提取数据,并赋值给Action的参数,模型绑定还可以完成完成从地址Url、路由Route、上传文件等中获取数据,并赋值给Action相应的参数。 UserName: PassWord: [HttpPost]//注意:参数名必须要...
阅读全文
摘要:一、概述 在此系列开篇的时候介绍了MVC的生命周期, 对于请求的处理,都是将相应的类的方法注册到HttpApplication事件中,通过事件的依次执行从而完成对请求的处理。对于MVC来说,请求是先 经过路由系统,然后由一个MvcHandler来处理的,当请求到来时,执行此MvcHandler的ProcessRequest方法(因为已将 MvcHandler类的ProcessRequest方法注册到HttpApplication的事件中,所以事件的执行就触发了此方法)。详细请看之前介绍MVC生命周期的两篇博客。 下面我们就以MVC声明周期为主线,来分析下MVC源码public class ..
阅读全文
摘要:本节来记录下有关URL路由的知识。1、URL路由的是做什么的呢? 简单的说:URL路由的功能就是分析请求的URL地址,也就是你在浏览器地址栏输入的地址,它将你请求的地址和我们定义的模版进行比较匹配。通俗的说,就是发来请求的地址和我原来定义的样式是否一样,如果匹配的话就继续执行,例如:将请求的部分信息和当前匹配的路由对象Route(定义的模版)封装到RouteData、确定处理请求的HttpHandler,不明白没关系,之后介绍。2、URL路由是MVC特有的吗? URL路由系统并不是专属于ASP.NET MVC的,而是直接建立在ASP.NET上。ASP.NET通过路由系统可以实现请求地址...
阅读全文
摘要:开篇介绍 在这里我想将自己在学习过程中了解的知识点整理下,一来对所学东西的过个巩固,二来再次记录一下以便以后翻看。 写这博文的目的是将自己的所学做一下整理,尽量用白话来描述,从而可以更加直观的了解。但是不会再从什么是MVC...等等说起,主要是根据用MVC源代码来分析整个流程,个人认为《ASP....
阅读全文
摘要:这一节就是介绍负责处理请求的MvcHandler的ProcessRequest方法里的两个方法。public class MvcHandler : IHttpAsyncHandler, IHttpHandler, IRequiresSessionState{ protected virtual void ProcessRequest(HttpContext httpContext) { //使用HttpContextWrapper对HttpContext进行封装,封装的目的是为了解耦以获得可测试性.然后从RequestContext.RouteData中提取Contr...
阅读全文
摘要:1、概要当我们新建一个MVC项目时,打开他的Web.Config文件可以发现 我们知道ScriptModule 类就是管理用于 ASP.NET 中 AJAX 功能的 HTTP 模块,在此我们不做介绍 //这个UrlRoutingModule类才是重点 这个HttpModule,拦截所有请求,对请求进行处理,最终创建和执行合适的处理请求的HttpHandler(MVC3之后,这个UrlRoutingModule集成到MVC程序集中了)。 当客户端在本地浏览器上输入网址来请求咱们的一个MVC程序时,服务端接收到请求.....此处省略N个字(和asp.net处...
阅读全文