7

ASP.NET MVC4 没有像常规 aspx 页面那样的页面生命周期。如何在 MVC4 中使用 preinit、init、prerender?

MVC4 中是否有任何类型的生命周期?

4

3 回答 3

10

不,本身没有页面生命周期(因为没有“页面”对象),但是有一个请求处理管道,通常是这样的:

  1. 传入的请求由System.Web.Routing.UrlRoutingModule使用请求 url 将请求映射到控制器操作方法来获取。
  2. 适当的控制器被实例化
  3. 可能会发生模型绑定和输入验证
  4. 调用控制器和/或动作上的动作过滤器的OnActionExecuting-methods
  5. 动作方法本身被调用
  6. 调用动作过滤器的任何OnActionExecuted和- 方法OnResultExecuting
  7. ActionResultaction 方法(通常是ViewResult呈现 HTML)返回的 被执行。
  8. OnResultExecuted调用动作过滤器的任何方法。

上面的列表只是一个粗略的草图:

路由:传入请求到 MVC 控制器的操作方法的映射本身就是一个故事。有关详细信息,请参阅MSDN 上的 ASP.NET 路由。

动作过滤器:有用于授权、输出缓存、错误处理等的动作过滤器,所有这些都在特定时间运行。这次请参阅MSDN 上的 ASP.NET MVC 中的过滤以获取更多信息。

ASP.NET:当然还有所有传统的 ASP.NET 应用程序事件。因此,像 good old System.Web.Security.FormsAuthenticationModuleand之类的 HTTP 模块System.Web.Caching.OutputCacheModule可能仍然参与请求的处理。

如果您想真正深入了解细节,请从CodePlex下载 ASP.NET Web 堆栈的源代码。您所追求的大部分内容都将在System.Web.Mvc.ControllerActionInvoker课堂上进行,尽管名字很吓人,但并不难理解。

请参阅 Dejan 的答案,以获得一个很好的图表的链接,该图表总结了大部分内容。

于 2013-07-30T18:02:41.280 回答
2
  1. 您的网络浏览器在服务器上发送 HTTP 请求
  2. 请求通过 HTTP 路由在此处获得更多信息
  3. 这些路线通常列在Global.asax.cs文件中,当我们的请求与我们转发的这些地图路线之一匹配时
  4. 路由处理程序,这里我们创建 MVC 请求处理程序,我们现在知道将使用哪个控制器以及要执行的操作
  5. 然后我们到达控制器,在那里我们调用服务并创建模型
  6. 我们将此模型传递给视图引擎(例如 RAzor)
  7. 然后在 Response 中渲染和输出视图

可以在http://msdn.microsoft.com/en-us/library/dd381612(v=vs.98).aspx上找到 Msdn 文档

于 2013-07-30T18:05:49.590 回答
0

您可以查看这篇文章“ ASP.NET MVC 5 应用程序的生命周期”,它大约在一周前发布。这里还有一个PDF 文件可供下载。

于 2014-03-05T16:03:08.963 回答