码迷,mamicode.com
首页 > Web开发 > 详细

ASP.NET 视图引擎

时间:2014-08-12 13:11:14      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   io   ar   art   cti   

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 视图引擎,布布扣,bubuko.com

ASP.NET 视图引擎

标签:style   blog   color   使用   io   ar   art   cti   

原文地址:http://www.cnblogs.com/JFCao/p/3906913.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!