1. 程式人生 > >使用T4模板動態生成郵件內容並儲存到任意位置

使用T4模板動態生成郵件內容並儲存到任意位置

processor net 下載 位置 sta http lte 擴展 span

一.基礎概念介紹
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);
        }

項目源碼下載:

http://download.csdn.net/download/manimanihome/9667483

使用T4模板動態生成郵件內容並儲存到任意位置