在某一個專案中,有一個要以 HTML 寄送電子報的需求,
於是找到了 NVelocity 的套件,這個套件在 NuGet 內可以找到,
下面會說明如何使用。
首先新增一個 Method 如下:
/// <summary>
/// 將資料套入範本檔
/// </summary>
/// <param name="templateLocation">套表範本路徑(不含檔名)</param>
/// <param name="templateName">套表範本檔名</param>
/// <param name="encoding">語系</param>
/// <param name="model">帶入套表的參數</param>
/// <returns>Html file</returns>
public string MergeTemplate(string templateLocation
, string templateName
, string encoding
, Hashtable model)
{
// 初始化並取得Velocity引擎
VelocityEngine ve = new VelocityEngine();
ve.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH
, HttpContext.Current.Request.MapPath(string.Format("~/{0}/"
, templateLocation)));
ve.Init();
Template t = new Template();
// 取得velocity的模版
t = ve.GetTemplate(templateName, encoding);
// 取得velocity的上下文context
VelocityContext context = new VelocityContext(model);
// 輸出流
StringWriter writer = new StringWriter();
// 轉換输出
t.Merge(context, writer);
string r = writer.ToString();
writer.Flush();
writer.Close();
return r;
}
用法:
●C# 語法:
string templateLocation = "vm" //範本檔路徑
string templateName = "temp.html" //範本檔名稱
string encoding = "UTF-8" //編碼
Hashtable model = new Hashtable //參數
model.Add("header", "test header") //「header」是html檔案要套用的參數名稱
//「test header」是參數內的值
VelocityHelper velocityHelper = new VelocityHelper();
string html = velocityHelper.MergeTemplate(templateLocation
, templateName
, encoding
, model);
●範本檔(html)的部份
在要套上參數的地方名稱加上「$」即可,如:「$header」
而這個名稱要跟 C# 程式碼的名稱對應。
參數也可以用物件帶入:
●C# 語法:
public class HeaderModel
{
public string text;
public string value;
}
HeaderModel hm=new HeaderModel();
model.Add("header", hm);
●範本檔(html)的部份:
$header.text
$header.value