使用车把和 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<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 content
至 dynamic 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 中的每个循环的主要内容,如果未能解决你的问题,请参考以下文章