asp.net mvc 页面生命周期
ASP.NET MVC 页面生命周期是从请求开始到结束的每一个过程,在浏览器输入URL并敲击回车来请求一个ASP.Net MVC网站的页面之后发生的任何事情,都是页面的生命周期的一部分。
生命周期步骤概览
1.Routing--路由
当ASP.NET应用程序第一次启动的时候才会发生第一步。一个应用程序有且只有一个RouteTable路由表。路由表在Global.asax文件中创建。ASP.NET MVC的路由过程是根据请求的Url和注册好的路由规则表进行匹配,当一旦找到一个与之匹配找路由规则时,ASP.NET MVC路由引擎就把这个请求交给相应的IRouteHandler处理,默认是调用一个IRouteHandler是MvcHandler。如果在路由规则表中没有找到一个相应的路由规则与请求的Url相匹配,则返回404错误。
2.MvcHandler--默认的Mvc处理组件
MvcHandler是真正开始响应ASP.NET MVC请求的类,它是默认的ASP.NET MVC处理Handler,通过实现了接口IHttpHandler的方法ProcessRequest。代码如下:
[code]protected internal virtual void ProcessRequest(HttpContextBase httpContext) { SecurityUtil.ProcessInApplicationTrust(delegate { IController controller; IControllerFactory factory; this.ProcessRequestInit(httpContext, out controller, out factory); try { controller.Execute(this.RequestContext); } finally { factory.ReleaseController(controller); } }); }
从上面可以看到在ProcessRequest方法是真正响应请求,其内部通过初始化IController和IControllerFactor的实例,最后调用了controller的方法Exceute并把把请求上下文RequestContext作为参数传入进去进行相应的处理。
3、Controller--控制器
Controller是MVC的最核心组件,它是连接视图和Model的桥梁,在Controller内部会有相应的Action的方法,可以决定了请求返回的视图和数据。
我们从上面的代码可以看到MvcHandler内部调用方法ProcessRequestInit采用输出参数的形式返回一个IController和IControllerFactory的实例,如果成功就调用controller的Exceute方法。ControllerFactory顾名思义就是负责创建Controller实例并对其进行初始化。如果没有指定IControllerFactory实例就是默认的MVC框架的IControllerFactory实例,当然我们也可以自定义一个ControllerFactory。然后在Application_Start事件中注册:
[code]protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RegisterRoutes(RouteTable.Routes); ControllerBuilder.Current.SetControllerFactory(new CustomControllerFactory()); }
4.Action Execution--Action方法
Controller被创建并初始化后,里面的Action就开始上场了。这里ASP.NET MVC的框架的一个核心组件ActionInvoker就决定了请求到底是哪一个Action方法。Action方法是真正的接受请求的处理方法。Action接受用户的输入,进行相应的逻辑处理并把要返回数据Model准备好之后传给相应的视图。
5.View Result--视图结果
Action方法的作用是接受输入,然后进行一定的处理并准备响应数据,最后返回一个View Result类型实例。返回的View Result类型这些类型:
ViewResult, RedirectToRouteResult, RedirectResult, ContentResult, JsonResult, FileResult, and EmptyResult等等。
6.View Engine--视图引擎
当我们在Action方法的最后返回一个View Result的时候,ASP.NET MVC框架首先就会选择相应的视图引擎来返回视图。ASP.NET视图引擎都会实现接口IViewEngine。默认ASP.NET MVC框架为我们提供了接口IViewEngine两个实现,视图引擎WebForm和razor。我们也可以自定义一个视图引擎,并在Application_Start注册:
[code]protected void Application_Start() { //Remove All View Engine including Webform and Razor ViewEngines.Engines.Clear(); //Register Your Custom View Engine ViewEngines.Engines.Add(new CustomViewEngine()); //Other code is removed for clarity }
7.View--视图
View视图其实就是一个模板的作用,它是把Action传过来的数据绑定到视图文件中并显示到页面中。
- 点赞
- 收藏
- 分享
- 文章举报
- asp.net页面生命周期详解——帮助理解asp.netMVC原理
- ASP.NET整体运行机制+asp.net请求管道+页面生命周期+MVC整体运行机制原理图
- asp.net页面生命周期详解——帮助理解asp.netMVC原理
- 深入研究Asp.net页面的生命周期
- 详细展示Asp.net页面的生命周期[转]
- asp.net mvc 中 tempdata、viewdata、viewbag生命周期(转载)
- asp.net mvc 如何在执行完某任务后返回原来页面
- 在ASP.NET MVC中使用Juqery实现页面局部刷新
- (转)ASP.NET MVC 3.0:基于Ajax的表单提交,A页面认证失败后页面被强转至登录页面,待登录成功将如何回到A页面?
- c# 扩展方法奇思妙用 ASP.NET MVC 篇:巧用扩展方法优先级,美化所有页面 TextBoxFor 文本框
- ASP.NET页面生命周期与应用程序生命周期
- asp.net mvc 页面缓存
- Asp.net Ajax客户端编程二之页面生命周期和请求生命周期
- Asp.net MVC生命周期
- 在ASP.NET MVC中使用Jquery实现页面局部刷新
- ASP.NET MVC页面重定向简单介绍
- ASP.NET页面生命周期概述(转载)
- WebForm页面生命周期及asp.net运行机制
- [转].NET (C#) Internals: ASP.NET 应用程序与页面生命周期(意译)
- ASP.NET页面生命周期描述