簡介
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頁面生命周期;