Asp.net页面生命周期有什么区别 和Asp.net Mvc页面生命周期?
Asp.net页面生命周期简单记住SILVER U.
s-开始
我初始化
L-负载
V-验证
电子事件处理
R -Rendering
U-Unload
在Mvc和Asp.net页面上有什么实际区别?
答案 0 :(得分:49)
ASP.NET页面生命周期与webforms完全不同,没有像我们在Web表单中那样的事件,例如:pre render,oninit等。每当我们请求url时,唯一发生的事情就是调用一些控制器动作,响应在浏览器中呈现。
根据 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()方法。
这是asp.net mvc请求流程:
有关详细说明,请参阅Understanding of MVC Page Life Cycle
答案 1 :(得分:4)
ASP.NET Web表单
ASP.NET MVC
它使用Front Controller方法。这种方法意味着共同点 所有页面的控制器都处理请求。
ASP.NET MVC方法与Web无关。所以没有 viewstate的概念。
但实际上在MVC中没有页面生命周期本身(因为没有'page'对象),但是有一个请求处理管道: