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

14

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

Asp.net页面生命周期,简单地记住SILVER U:
s-开始
I-初始化
L-加载
V-验证
E-事件处理
R-呈现
U-卸载
MVC和Asp.net页面的实际区别是什么?


1
你有没有尝试在网上搜索http://www.asp.net/mvc/tutorials/mvc-5/lifecycle-of-an-aspnet-mvc-5-application? - 3dd
2个回答

68

ASP.NET页面的生命周期与WebForms完全不同,没有像Web Forms中那样的事件,例如:pre render, oninit等。每当我们请求URL时,唯一发生的事情是创建一个控制器实例并调用其中的某个操作方法,这将导致在浏览器中呈现视图作为HTML响应。

ASP.NET MVC页面生命周期:

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

1)路由(Routing)

将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()方法从RouteData中获取Action,该Action基于URL。 然后,控制器类调用ContollerActionInvoker,从请求构建参数列表。

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

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

5)呈现视图方法被调用

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

控制器通常执行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
参考链接:
详细了解请参阅 理解MVC页面的生命周期 此外, 这是另一篇很好的文章,介绍了MVC页面的生命周期

1
长但惊人。 - Saurabh

4

ASP.NET Web Forms

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

ASP.NET MVC

  • 它使用前端控制器方法。这种方法意味着所有页面的通用控制器处理请求。

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

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

您可以从这里获得良好的描述或参考MVC4和页面生命周期?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接