2015-03-30 115 views
2

我正在使用Mandrill發送電子郵件,並且正在使用Handlebars來呈現電子郵件中的內容。mandrill中使用把手和Mandrill-dotnet的每個循環-library

如果我添加變量,這樣一切正常:

後端:

message.AddRecipientVariable("[email protected]", "MYVALUE", "some value"); 

的HTML模板:

<p>{{MYVALUE}}</p> 

但是,如果我嘗試使用{{#each}} - 發送的電子郵件中的每個部分都是空的。我在這裏做錯了什麼。我是否以錯誤的方式傳遞objStringArray或者是否還有其他錯誤來渲染循環?

後端:

var objList = new List<MyObj> {new MyObj() {Qty = "125"}, new MyObj() { Qty = "16"}}; 

var jsonSerialiser = new JavaScriptSerializer(); 
var objStringArray = jsonSerialiser.Serialize(objList.ToArray()); 

message.AddRecipientVariable("[email protected]", "VALUES", objStringArray); 

message.merge_language = "handlebars"; 
_mandrillApi.SendMessage(message, templateName, new List<TemplateContent>()); 

的HTML模板:

<ul> 
    {{#each VALUES}} 
    <li>{{Qty}}</li> 
    {{/each}} 
</ul> 

Handlebars in mandrill

Mandrill-dotnet

回答

2

提到根據我使用的庫(Mandrill-DotNet)的方法:AddRecipientVariable()只需要輸入字符串作爲內容變量。而madrill-API在執行{{#each}}事情時需要一個列表。所以通過稍微改變庫源代碼,我可以將List<dynamic>()改爲AddRecipientVariable -s內容參數,而且它可以很好地工作。

通過改變源代碼:

public struct merge_var 
{ 
    #region Fields 

    /// <summary> 
    ///  The content. 
    /// </summary> 
    public string content; 

    /// <summary> 
    ///  The name. 
    /// </summary> 
    public string name; 

    #endregion 
} 

    public void AddRecipientVariable(string recipient, string name, string content) 
    { 
     if (this.merge_vars == null) 
     { 
      this.merge_vars = new List<rcpt_merge_var>(); 
     } 

     rcpt_merge_var entry = this.merge_vars.Where(e => e.rcpt == recipient).FirstOrDefault(); 
     if (entry == null) 
     { 
      entry = new rcpt_merge_var { rcpt = recipient }; 
      this.merge_vars.Add(entry); 
     } 

     var mv = new merge_var { name = name, content = content }; 

     entry.vars.Add(mv); 
    } 

向該(string contentdynamic content):

public struct merge_var 
{ 
    #region Fields 

    /// <summary> 
    ///  The content. 
    /// </summary> 
    public dynamic content; 

    /// <summary> 
    ///  The name. 
    /// </summary> 
    public string name; 

    #endregion 
} 

    public void AddRecipientVariable(string recipient, string name, dynamic content) 
    { 
     if (this.merge_vars == null) 
     { 
      this.merge_vars = new List<rcpt_merge_var>(); 
     } 

     rcpt_merge_var entry = this.merge_vars.Where(e => e.rcpt == recipient).FirstOrDefault(); 
     if (entry == null) 
     { 
      entry = new rcpt_merge_var { rcpt = recipient }; 
      this.merge_vars.Add(entry); 
     } 

     var mv = new merge_var { name = name, content = content }; 

     entry.vars.Add(mv); 
    }