使用T4模板動態生成郵件內容並儲存到任意位置(來自網路)
阿新 • • 發佈:2021-07-16
一.基礎概念介紹
T4模板是副檔名為 .tt 的文字檔案。 他分為設計時模板和執行時模板。主要區別在於在vs中右鍵點選檔案,開啟“屬性”,在“自定義工具”一欄中的值分別如下:
設計時模板:TextTemplatingFileGenerator
執行時模板:TextTemplatingFilePreprocessor
二.模板轉換
當然設計時模板可以轉為執行時模板,只要將該檔案的“自定義工具”屬性設定為 TextTemplatingFilePreprocessor即可。
但是執行時模板很多情況下不能轉為設計時模板。
三.執行時模板的使用
這裡講解通過C#程式碼來控制,何時執行T4模板來產生郵件內容,並儲存到指定的位置。
1.新增一個T4模板,修改為執行時模板
MultiArticle.tt
<#@ template language="C#" #> <div style="text-align:center;"> <table width="600" cellpadding="0" cellspacing="0" border="0" style="margin:0 auto;"><tbody><tr><td> <div style="width:600px;text-align:left;font:12px/15px simsun;color:#000;background:#fff;"> <h1><#=Subject #></h2> <table> <# foreach(Article item in ArticleList) { #> <tr><td> <#= item.Title #> </td><td> <#= item.Content #> </td></tr> <# } #> </table> </div> </td></tr></tbody></table> </div>
2.這個模板需要一個實體類表示郵件的內容
一個是以模板名+code結尾:MultiArticleCode.cs,注意類名與模板名必須相同,都是MultiArticle。
public class Article { public string Title { get; set; } public string Content { get; set; } } public partial class MultiArticle { public string Subject { get; set; } public List<Article> ArticleList { get; set; } public MultiArticle(string subject, List<Article> articles) { Subject = subject; ArticleList = articles; } }
3.動態執行
static void Main(string[] args) { string subject="最新訊息"; var artList=new List<Article>(); for (int i = 0; i < 4; i++) { Article art = new Article(); art.Title = "標題"+i+":"+Guid.NewGuid(); art.Content = "內容" +i+ ":" + Guid.NewGuid(); artList.Add(art); } MultiArticle mod = new MultiArticle(subject,artList); //TransformText方法是模板編譯時自動產生的, //這也是前面有提到的,模板MultiArticle.tt的命名要與MultiArticleCode.cs中的類名相同的原因, //利用分部類partial,就可以呼叫該TransformText方法了。 string pageContent = mod.TransformText(); //將pageContent儲存到任何你想儲存的地方 System.IO.File.WriteAllText("outputPage.html", pageContent, Encoding.UTF8); }