【问题标题】:Each-loop in mandrill using handlebars and Mandrill-dotnet -library使用车把和 Mandrill-dotnet -library 在 mandrill 中的每个循环
【发布时间】: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

【问题讨论】:

    标签: c# json templates mandrill


    【解决方案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 中提到的错误方式嵌套

      【讨论】:

        猜你喜欢
        • 2019-03-10
        • 2015-09-30
        • 2015-06-17
        • 2015-07-09
        • 2015-07-20
        • 2021-06-16
        • 2018-02-23
        • 2015-12-29
        • 2016-06-09
        相关资源
        最近更新 更多