Asp.net页面生命周期与Asp.net Mvc页面生命周期有什么区别?
Asp.net页面生命周期,简单地记住SILVER U:
s-开始
I-初始化
L-加载
V-验证
E-事件处理
R-呈现
U-卸载
MVC和Asp.net页面的实际区别是什么?
Asp.net页面生命周期与Asp.net Mvc页面生命周期有什么区别?
Asp.net页面生命周期,简单地记住SILVER U:
s-开始
I-初始化
L-加载
V-验证
E-事件处理
R-呈现
U-卸载
MVC和Asp.net页面的实际区别是什么?
ASP.NET页面的生命周期与WebForms完全不同,没有像Web Forms中那样的事件,例如:pre render, oninit等。每当我们请求URL时,唯一发生的事情是创建一个控制器实例并调用其中的某个操作方法,这将导致在浏览器中呈现视图作为HTML响应。
根据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()方法。
抽象解释图:![]()
详细图解:![]()
请求流程:
以下是ASP.NET MVC的请求流程:![]()
参考链接:
详细了解请参阅 理解MVC页面的生命周期 此外, 这是另一篇很好的文章,介绍了MVC页面的生命周期
ASP.NET Web Forms
ASP.NET MVC
它使用前端控制器方法。这种方法意味着所有页面的通用控制器处理请求。
ASP.NET MVC方法与Web一样无状态。因此没有视图状态的概念。
但实际上,在MVC中没有页面生命周期(因为没有'page'对象),但有一个请求处理管道:
您可以从这里获得良好的描述或参考MVC4和页面生命周期?