NVelocity模板引擎

简介

      NVelocity是一个基于.NET的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由.NET代码定义的对象。

语法

   
#include("head.htm") //引入文件
#parse("head.htm")   //引入文件,与include不同的是,parse可以解析文件中的对象
#set ($age =20)  //定义一个age变量,并通过set赋值    
$age  //展示变量age 
 
 
     //简单判断              
      #if($age>10)     
         懵懂骚年
      #else
         花样年华
      #end
     //复杂判断
     #if( $age > 5 && $age <= 10 ) 
          学英语,so easy!
      #elseif( $age > 10 && $age <= 16)
          作业多,怎么办
      #elseif( $age > 16 && $age <= 19)
          化学难! 
      #else
          后来我们开始怀念上学了!
      #end
      //通过foreach循环遍历集合元素
      #foreach($p in $Model.Persons)   
         $p.Name  //姓名
         $p.Age   //年龄
         $p.Phone //手机号
      #end
    

NVelocity配合一般处理程序(简单使用)

      
 <table class="doc-table" >
          <thead><tr><td>姓名</td><td>年龄</td><td>手机号码</td></tr></thead>
          <tbody>
             #foreach($p in $Model.Persons)  //通过$Model.Persons循环生成tr中内容
                <tr><td>$p.Name</td><td>$p.Age</td><td>$p.Phone</td>
             #end
          </tbody>
</table>
    public class Test : IHttpHandler {
        public void ProcessRequest(HttpContext context) {
            context.Response.ContentType = "text/html";  //设置输出html
            List<person> list = new List<person>();      //循环生成泛型List<person>
            for (int i = 1; i <= 10; i++) {
                Person p = new Person() { Name = "长江" + i + "号", Age = 18 + i, Phone = (18801001618 + i).ToString() };
                list.Add(p);
            }
            var data = new { Persons = list };           //将list绑定到匿名类的Persons属性

            VelocityEngine vltEngine = new VelocityEngine();    //初始化NVeloity
            vltEngine.SetProperty(RuntimeConstants.RESOURCE_LOADER, "file");

            //使用System.Web.Hosting命名空间下的HostingEnvironment.MapPath 指定模板文件所在的文件夹
            vltEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH,HostingEnvironment.MapPath("~/templates"));

            vltEngine.Init();

            VelocityContext vltContext = new VelocityContext(); //NVelocity上下文

            //给数据data指定一个key为"Model",在模板页(视图)中$Model,通过put方法放入NVelocityContext中
            vltContext.Put("Model", data);  

            Template vltTemplate = vltEngine.GetTemplate("test.htm"); //获取模板所在的路径和文件名(相对于指定模板文件夹的位置)
            StringWriter vltWriter = new StringWriter();
            vltTemplate.Merge(vltContext, vltWriter);     //内部通过Render解析遍历“Model”
            string htm = vltWriter.GetStringBuilder().ToString();

            context.Response.Write(htm);
        }        
    }
    
    //联系人
    public class Person {
        public string Name { get; set; }
        public int Age { get; set; }
        public string Phone { get; set; }
    }

总结

     1.通过NVelocity可以让我们页面设计人员可以只关注页面的显示效果,而又可以让我们.NET程序开发人员关注业务逻辑实现,为后期维护也提供很大的便利性;

     2.NVelocity和一般处理程序相结合,可以避免复杂的aspx页面生命周期;

posted @ 2013-11-25 18:54  秋壶冰月  阅读(2870)  评论(3编辑  收藏  举报