Loading

View Engine 视图引擎(一)

MVC 3 允许创建自己的视图引擎而不使用自带的Razor视图或者APSX视图。下面就介绍一下如何创建自定义的视图引擎。

首先,View Engine 继承于 IViewEngine接口。IViewEngine接口的定义如下:

1 public interface IViewEngine {
2 ViewEngineResult FindView(ControllerContext controllerContext, string viewName,
3 string masterName, bool useCache);
4 ViewEngineResult FindPartialView(ControllerContext controllerContext,
5 string partialViewName, bool useCache);
6 void ReleaseView(ControllerContext controllerContext, IView view);
7 }

视图引擎的角色是将Request转换成ViewEngineResult,第一第二个方法的参数需要一个controllercontext,一个viewname,一个mastername和一个指定之前的结果是否可以在缓存中重用的参数。最后一个方法ReleaseView,当视图不在被使用将被释放时调用。

ViewEngineResult 类允许视图引擎在视图需要展示时响应Request请求。你可以选择下列两种构造函数中的一个进行创建ViewEngineResult:

1. public ViewEngineResult(IView view,IViewEngine viewEngine);

   该构造函数的参是使从IView接口和view Engine继承而来的。

   如果你的视图引擎并不能提供响应request的视图,你可以使用下面的构造函数:

2. public ViewEngineResult(IEnumberable<string> searchLocations);

  这个版本的构造函数将在若干地方寻找视图文件,如果找不到将会显示错误信息。

 

视图引擎系统中最后一个块内容是IView接口,如下面代码所示:

1 namespace System.Web.Mvc {
2 using System.IO;
3 public interface IView {
4 void Render(ViewContext viewContext, TextWriter writer);
5 }
6 }

我们把一个实现了IView的对象传给ViewEngineResult对象的构造函数,然后返回View Engine方法。 MVC框架会调用Render方法。ViewContext上下文包含了来自客户端的Request信息,TextWriter会向客户端输出一些内容。

 

学习IViewEngine、Iview和ViewEngineResult之间关系的最好方法就是创建一个View Engine。

下一篇文章,我们将创建一个自己的View Engine。

posted @ 2013-04-04 12:29  青岛欧姆网络科技  阅读(1139)  评论(0编辑  收藏  举报