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

ASP.NET 视图引擎,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。