【发布时间】:2017-06-25 22:17:45
【问题描述】:
我正在研究使用 dotliquid 替换一段自制的模板代码,我想知道实现目标的最佳方法。
旧代码在模板中使用符号,并与字典一起使用正则表达式进行搜索和替换。所以你在模板文件中做了这样的事情:
Specific error: {#ErrorId#}
Error description: {#Description#}
Additional information:{#AdditionalInformation#}
在 C# 代码中:
Dictionary<string, string> tokensAndValues = new Dictionary<string, string>
{
{@"ErrorId", errorId},
{@"Description", description},
{@"AdditionalInformation", additionalInformation}
};
我遇到了 dotnetliquid,它看起来非常强大(可能超出了我的需求?)。我已经让它工作了,但我想问一下我是否以正确的方式处理这个问题?
看来我不得不声明一个类即。
public class EmailTemplateInfo : Drop
{
public string ErrorId { get; set; }
public string Description { get; set; }
public string AdditionalInformation { get; set; }
}
然后按如下方式使用:
Template.NamingConvention = new CSharpNamingConvention();
Template template = Template.Parse(templateText);
EmailTemplateInfo emailTemplateInfo = new EmailTemplateInfo
{
AdditionalInformation = additionalInformation,
Description = description,
ErrorId = errorId
};
string htmlText = template.Render(Hash.FromAnonymousObject(new {emailTemplateInfo = emailTemplateInfo }));
几个问题:
这是正确的方法吗?如果是这样,那么我将建议对演示此功能的文档进行补充。
-
其次,在我使用的模板中,我是否需要使用这样的变量名称来限定占位符?
Specific error: {{emailTemplateInfo.ErrorId}} Error description: {{emailTemplateInfo.Description}} Additional information:{{emailTemplateInfo.AdditionalInformation}} 我看不出命名约定声明 [
Template.NamingConvention = new CSharpNamingConvention();] 如何与它下面的模板变量声明联系在一起。是否正在进行某种全局缓存?
【问题讨论】:
标签: c# .net template-engine liquid dotliquid