特定视图呈现时发生的事件顺序

特定视图呈现时发生的事件顺序:

动作方法返回的ViewResult执行

ViewResult 使用ViewEngineCollection查找视图

ViewEngineCollection给每个注册的IViewEngine解析该视图的机会。顺序由集合中视图引擎的顺序决定

ViewResult使用ControllerContext,视图名称,ViewData和TempData创建一个ViewContext。

ViewResult调用传入ViewContext和响应流的IView上的Render()。

如果IView实例继承自WebFormView,发生后面的步骤。

WebFormView使用IBuildManager从一个虚拟路径创建一个ViewPage或ViewUserControl。

WebFormView在ViewPage上设置MasterLocation,设置ViewData并且调用传入ViewContext的RenderView()。

ViewPage存储ViewContext,初始化HtmlHelper,AjaxHelper和UrlHelper,然后委托给你已经熟悉的base.processRequest(),因为它是IHttpHandler上的主要方法。

从动作方法返回一个ViewResult到现有响应管道执行时,你作为开发人员有多个地方可以定制呈现过程的行为。如下接口是你可以插入到自己的逻辑并且在动作方法返回之后改变默认行为的扩展点。

IView

IViewDataContainer

IViewEngine

IViewLocationCache

广泛使用的扩展点是IViewEngine,因为这是继承其他视图引擎所必需的扩展点。从WebFormViewEngine继承一个类并覆盖FileExists()或CreateView()方法也相当简单。

posted on 2013-06-17 16:18  雷音  阅读(186)  评论(0编辑  收藏  举报

导航