首页 > 代码库 > ASP.NET 视图引擎
ASP.NET 视图引擎
ASP.NET 中从MVC3.0 开始引入可Razor视图引擎。而遗留的ASPX引擎对维护与旧版的MVC程序是用的。
一、视图引擎是实现了IViewEngine接口,View Engine的作用是把对View的请求转换成ViewEngineResult对象,下面是此接口的定义:
namespace System.Web.Mvc{ public interface IViewEngine { ViewEngineResult FindPartialView(ControllerContext controllerContext, string partialViewName, bool useCache); ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache); void ReleaseView(ControllerContext controllerContext, IView view); }
Mvc框架对视图引擎的支持是由ControllerActionInvoker类实现的,这是IActionInvoker接口的内建实现。
二、ViewEngineResult类允许视图引擎对Mvc框架做出响应。通过2个构造函数之一,可以表示一个结果。也就是说它包含一个IView,或者是一个用于搜索适当视图的位置列表。
using System.Collections.Generic;namespace System.Web.Mvc{ public class ViewEngineResult { public ViewEngineResult(IEnumerable<string> searchedLocations) { if (searchedLocations == null) { throw new ArgumentNullException("searchedLocations"); } SearchedLocations = searchedLocations; } public ViewEngineResult(IView view, IViewEngine viewEngine) { if (view == null) { throw new ArgumentNullException("view"); } if (viewEngine == null) { throw new ArgumentNullException("viewEngine"); } View = view; ViewEngine = viewEngine; } public IEnumerable<string> SearchedLocations { get; private set; } public IView View { get; private set; } public IViewEngine ViewEngine { get; private set; } }}
public ViewEngineResult(IView view, IViewEngine viewEngine) 构造函数 接受一个IView接口和一个视图引擎,这个视图引擎以便后面能够调用ReleaseView方法。
如果视图引擎不能提供对请求的视图,那么可以使用另一个函数 public ViewEngineResult(IEnumerable<string> searchedLocations),给它提供查找视图位置的列表,在这些位置没有查询的到,就会显示信息给用户。
三、IView 接口 :负责生成客户端响应。
using System.IO;namespace System.Web.Mvc{ public interface IView { void Render(ViewContext viewContext, TextWriter writer); }}
这个接口只有一个方法,目的是取得ViewContext的值,并用TextWriter向客户端写入响应。
四、自定义视图引擎
通过实现IViewEngine接口,可以创建自定义的视图引擎。创建完自定义视图引擎后,我们还需要注册自定义的视图引擎。Mvck框架为我们提供2中注册方法。
其一 :在Global.asax的Application_Start方法中注册。
ViewEngines.Engines.Add(new 自定义视图引擎());
此方法可以控制视图引擎的优先级,如果想吧我自定义的视图引擎添加到第一位。可这样写:
ViewEngines.Engines.Insert(0,new 自定义视图引擎());
其二:采用应用程序范围的依赖性解析器注册。
此方法不能控制视图引擎的优先级。
-----------------------------------------------------------------------------------------------------------
所以我们只要通过实现2个接口(IViewEngine接口和IView接口),便能够创建一个自定义的视图引擎。而这个自定义的视图引擎的功能是十分简单的。
Mvc框架我们提供了功能强大的Razor引擎,第三方也为我们提供了一些功能强大的视图引擎。比如:Spark,NHaml,Brail,NVelocity