0

我需要来自我的域模型的特定对象的动态呈现电子邮件模板。我知道我可以创建对象并从Drop类继承它。另外,我知道我可以将特定类型添加到全局安全类型,但这并不能解决问题。如何从我的特定类型呈现模板?

var message = _template.Render(Hash.FromAnonymousObject(new {Item = User}));
public class User { public string Name { get; set;}.....}

安全类型不适合此任务,因为在我的特定对象中有嵌套对象,我也需要访问它们。

Template.RegisterSafeType(typeof(User,string[] allowedMembers));

我可以从 dotliquid 程序集类继承我的特定类型,Drop但我认为它对我没有帮助。

4

2 回答 2

1

RegisterSafeType 如果您想避免Drop和替代方案,这是解决方案。

只需注册所有相关类型(近似代码):

Template.RegisterSafeType(typeof(User), userAllowedMembers);

然后说User有一个类型的属性Address。您可以简单地继续注册

Template.RegisterSafeType(typeof(Address), addressAllowedMembers);
于 2018-12-08T17:12:33.753 回答
0
Dim TemplateContent = CacheHelper.GetFileContentsNonCached("/Path/To/Template/File.htm")

Dim TemplateParsed = DotLiquid.Template.Parse(TemplateContent)
Return TemplateParsed.Render(Hash.FromAnonymousObject(New With {
  .Item = User,
  ......
}))

以上代码在 VB.Net 中,但很容易转换为 C#。这不需要注册任何类型安全等。

于 2017-08-28T02:27:24.697 回答