【问题标题】:MVC4 and page life cycle?MVC4和页面生命周期?
【发布时间】:2016-05-04 14:23:04
【问题描述】:

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

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

【问题讨论】:

标签: asp.net-mvc-4


【解决方案1】:

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

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

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

路由: 传入请求到 MVC 控制器的操作方法的映射本身就是一个故事。请参阅ASP.NET Routing on MSDN 了解更多信息。

动作过滤器: 有用于授权、输出缓存、错误处理等的操作过滤器,所有这些都在特定时间运行。这次见Filtering in ASP.NET MVC on MSDN了解更多信息。

ASP.NET: 而且,当然还有traditional ASP.NET application events。因此,像古老的System.Web.Security.FormsAuthenticationModuleSystem.Web.Caching.OutputCacheModule 这样的HTTP 模块可能仍会参与请求的处理。

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

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

【讨论】:

  • 优秀的图表和答案。
【解决方案2】:
  1. 您的网络浏览器在服务器上发送 HTTP 请求
  2. 请求通过 HTTP 路由 more info here
  3. 当我们的请求与我们转发的这些地图路线之一匹配时,这些路线通常列在Global.asax.cs 文件中
  4. 路由处理程序,这里我们创建 MVC 请求处理程序,我们现在知道将使用哪个控制器以及要执行的操作
  5. 然后我们进入控制器,我们在其中调用服务并创建模型
  6. 我们将此模型传递给视图引擎(例如 RAzor)
  7. 然后在 Response 中渲染和输出视图

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

【讨论】:

    【解决方案3】:

    您可以查看这篇文章“Lifecycle of an ASP.NET MVC 5 Application”,它大约在一周前发布。这里还有一个PDF file可以下载。

    【讨论】:

    • 请注意 link-only answers 是不鼓励的,所以答案应该是寻找解决方案的终点(相对于另一个中途停留的参考,随着时间的推移往往会变得陈旧)。请考虑在此处添加独立的概要,并保留链接作为参考。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多