2015-03-30 112 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); 
    }