Asp.net页面生命周期和Asp.net Mvc页面生命周期有什么区别?

时间:2014-07-11 05:54:59

标签: asp.net asp.net-mvc

Asp.net页面生命周期有什么区别 和Asp.net Mvc页面生命周期?

Asp.net页面生命周期简单记住SILVER U.
s-开始
我初始化
L-负载
V-验证
电子事件处理
R -Rendering
U-Unload
在Mvc和Asp.net页面上有什么实际区别?

2 个答案:

答案 0 :(得分:49)

ASP.NET页面生命周期与webforms完全不同,没有像我们在Web表单中那样的事件,例如:pre render,oninit等。每当我们请求url时,唯一发生的事情就是调用一些控制器动作,响应在浏览器中呈现。

ASP.NET MVC页面生命周期:

根据 MSDN ,以下是asp.net mvc页面生命周期中涉及的主要步骤:

1)路由

  
    

将url路由到其控制器和操作

         

在ASP.NET应用程序中,每个asp.net页面都实现了IHTTPHandler接口。

  
     

此接口具有ProcessRequest()方法,在您请求页面时会调用该方法。 ProcessRequest()方法负责处理请求并生成响应。因此,在ASP.NET应用程序中,它很简单,您需要在http://mysite1\default.aspx之类的URL中请求页面,然后在磁盘上搜索该页面并执行processrequest方法并生成响应。

     
    

然而,在MVC应用程序中,它不能以这种方式工作。特定请求不存在物理页面。所有请求都被路由到一个名为Controller的特殊类。控制器负责生成响应并将内容发送回浏览器。

  

2)网址路由模块拦截请求:

  
    

每当您针对ASP.NET MVC应用程序发出请求时,UrlRoutingModule HTTP模块都会拦截该请求。

         

当UrlRoutingModule拦截请求时,模块所做的第一件事就是将当前的HttpContext包装在HttpContextWrapper对象中。

         

HttpContextWrapper对象派生自HTTPContextBase类。

  

3)MVC处理程序执行

  
    

MVCHandler也继承自IHTTPAsyncHandler。当MVC Handler执行时,它将异步调用httpAsyncHandler的BeginProcessRequest方法。

         

调用流程请求方法时,会创建一个新控制器。控制器是从ControllerFactory创建的。有一个ControllerBuilder类,它将设置ControllerFactory。

         

您也可以创建自己的ControllerFactory,但默认情况下它将是DefaultControllerFactory。 RequestContext和Contoller的名称将传递给方法CreateController方法以获取特定的控制器。

  

4)Controller Executes

调用

控制器并且用户请求调用其动作。

  
    

Execute()方法首先创建TempData对象。 TempData是一个派生自TempDataDictionary类的字典,存储在短生命会话中,它是一个字符串键和对象值。

         

Execute()方法根据URL从RouteData获取Action.Controller Class然后调用ContollerActionInvoker,从请求中构建参数列表。

         

从请求参数中提取的这些参数将作为方法参数。参数将传递给任何执行的控制器方法。

         

最后,它将调用InvokeAction方法来执行Action。

  

5)渲染视图方法

  
    

最后,当我们调用reutrn View()时,调用Render View方法,并在要显示的页面上放置响应。

         

Controller通常执行RedirectToAction方法或RenderView方法。当您调用控制器的RenderView()方法时,该调用将委托给当前的ViewEngine的RenderView()方法。

         

WebFormViewEngine.RenderView()方法使用名为ViewLocator类的类来查找视图。接下来,它使用BuildManager从其路径创建ViewPage类的实例。

         

接下来,如果页面具有母版页,则设置母版页的位置如果页面具有ViewData,则设置ViewData。最后,在ViewPage上调用RenderView()方法。

  

摘要说明图:

enter image description here

深度图:

enter image description here

请求流程"

这是asp.net mvc请求流程:

enter image description here

参考链接

有关详细说明,请参阅Understanding of MVC Page Life Cycle

Here is another good article explaining MVC Page Life Cycle

答案 1 :(得分:4)

ASP.NET Web表单

  • ASP.NET Web窗体使用页面控制器模式方法进行渲染 布局。在这种方法中,每个页面都有自己的控制器,即 处理请求的代码隐藏文件。
  • 为了实现有状态行为,使用viewstate。目的是 为开发人员提供与典型WinForms相同的体验 应用

ASP.NET MVC

  • 它使用Front Controller方法。这种方法意味着共同点 所有页面的控制器都处理请求。

  • ASP.NET MVC方法与Web无关。所以没有 viewstate的概念。

但实际上在MVC中没有页面生命周期本身(因为没有'page'对象),但是有一个请求处理管道:

您可以从here nice description获取帮助或参考MVC4 and page life cycle?