2016年7月20日 星期三

如何使用模版引擎 - NVelocity? / How to use NVelocity ?

在某一個專案中,有一個要以 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

沒有留言:

張貼留言

Surface pro 6降頻至0.4GHz的解決方式

網路查到很多都說: 按住電源鍵30秒關機、再同時按住電源鍵+音量上鍵15秒重啟,解決。 實際試過是有效,但某一天看到當配件溫度過高,也是會造成降頻的原因之一, 索性就把電源線拔掉,神奇的事情發生了~~ cpu頻率就正常了 。 但其實當下電源供應器並沒有發熱的現象,只...