首页 > 代码库 > 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