我需要从我的域模型中的特定对象动态呈现电子邮件模板。我知道我可以创建对象并从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类继承我的特定类型,但我认为它对我没有帮助。
答案 0 :(得分: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#。 这不需要注册任何类型的安全等。
答案 1 :(得分:0)
RegisterSafeType
及其替代方案,则 Drop
是解决方案。
只需注册所有相关类型(近似代码):
Template.RegisterSafeType(typeof(User), userAllowedMembers);
然后说User
具有类型Address
的属性。您只需使用
Template.RegisterSafeType(typeof(Address), addressAllowedMembers);
以此类推。