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