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页面生命周期;
作者:秋壶冰月
出处:
http://www.cnblogs.com/qq0827
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给原文链接,否则保留追究法律责任的权利。