【问题标题】:what is the difference between Asp.net page life cycle and Asp.net Mvc page life cycle?Asp.net 页面生命周期和 Asp.net Mvc 页面生命周期有什么区别?
【发布时间】:2014-07-11 05:54:59
【问题描述】:

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

Asp.net 页面生命周期 只需记住 SILVER U
s- 开始
I-初始化
L-负载
V- 验证
E- 事件处理
R -渲染
U -卸载
Mvc 和 Asp.net 页面的实际区别是什么?

【问题讨论】:

标签: asp.net asp.net-mvc


【解决方案1】:

ASP.NET 页面生命周期与 web 表单完全不同,没有像我们在 web 表单中那样的事件,例如:pre renderoninit 等。请求一个 URL 唯一发生的事情是,一个控制器的实例被装箱并调用它的一些操作方法,这导致将视图呈现为 HTML 作为浏览器中的响应。

ASP.NET MVC 页面生命周期:

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

1) 路由

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

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

此接口有一个 ProcessRequest() 方法,当您请求页面时会调用该方法。 ProcessRequest() 方法负责处理请求并生成响应。所以在 ASP.NET 应用程序中很简单,您在 url 中请求一个页面,如 http://mysite1\default.aspx,然后它在磁盘上搜索该页面并执行 processrequest 方法并生成响应。

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

2)Url Routing Module拦截请求:

每当您向 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 方法以获取特定的 Contoller。

4) 控制器执行

控制器被调用并且它的动作被用户请求调用。

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

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

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

最后会调用InvokeAction方法来执行Action。

5)调用渲染视图方法

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

控制器通常要么执行 RedirectToAction 方法,要么执行 RenderView 方法。当您调用控制器的 RenderView() 方法时,调用会委托给当前 ViewEngine 的 RenderView() 方法。

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

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

抽象解释图:

深度图:

请求流程”

这里是asp.net mvc请求流程:

参考链接

详细了解请参考Understanding of MVC Page Life Cycle

还有 Here is another good article explaining MVC Page Life Cycle

【讨论】:

  • 漫长但令人惊叹
【解决方案2】:

ASP.NET 网络表单

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

ASP.NET MVC

  • 它使用前端控制器方法。这种方法意味着一个共同的 所有页面的控制器都会处理请求。

  • ASP.NET MVC 方法与 Web 方法一样是无状态的。所以没有 视图状态的概念。

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

您可以向here nice description 寻求帮助或参考MVC4 and page life cycle?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 2012-01-17
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多