使用车把和 Mandrill-dotnet -library 在 mandrill 中的每个循环

Posted

技术标签:

【中文标题】使用车把和 Mandrill-dotnet -library 在 mandrill 中的每个循环【英文标题】:Each-loop in mandrill using handlebars and Mandrill-dotnet -library 【发布时间】:2015-06-03 23:50:48 【问题描述】:

我正在使用 Mandrill 发送电子邮件,并且正在使用 Handlebars 来呈现电子邮件中的内容。

如果我像这样添加变量,一切正常:

后端:

message.AddRecipientVariable("test@gmail.com", "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("test@gmail.com", "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

【问题讨论】:

【参考方案1】:

根据我正在使用的库 (Mandrill-DotNet) 方法:AddRecipientVariable() 仅将类型字符串作为内容变量。 madrill-API 在执行 #each 时需要一个列表。因此,通过稍微更改库源代码,我可以将常规的 List&lt;dynamic&gt;() 传递给 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);
    

【讨论】:

【参考方案2】:

我正在使用 Python 中的 Djrill,所以我不熟悉您正在使用的库。

但是您应该确保您的 JSON 没有以 #each ... on Mandrill is resulting in an empty string 中提到的错误方式嵌套

【讨论】:

以上是关于使用车把和 Mandrill-dotnet -library 在 mandrill 中的每个循环的主要内容,如果未能解决你的问题,请参考以下文章

如何使用车把获取 Flash 消息?

需要傻瓜车把和 Sendgrid (UX) 活动

我想将 Head 和 Body 合并到车把中(node.js)

车把部分与渲染与模板

带有主干模板的车把未渲染

车把或主干将空字符串插入 html