2017-08-25 57 views
0

我需要從我的域模型的特定對象動態呈現電子郵件模板。我知道我可以創建對象並從Drop類繼承它。另外,我知道我可以將特定類型添加到全局安全類型,但這不能解決任務。 如何從我的特定類型呈現模板?如何從自定義對象的dotliquid呈現模板

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

安全類型不適合此任務,因爲在我的特定對象中有嵌套對象,我也需要訪問它們。

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

我可以繼承我的特定類型從dropli類的dotliquid大會,但我認爲它不能幫助我。

回答

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#。 這不需要註冊任何類型的安全等。

+0

您的情況不起作用,因爲用戶是一個複雜的自定義對象與嵌套對象和大量屬性。 dotliquid不知道如何投射這個物體。您需要從ILiquidizable繼承您的類型並實現ToLiquid方法,或者您需要從DROP類繼承您的類型。任何其他方式不起作用。 –

+0

@PavelKononenko:我對至少2級的屬性使用這種技術,它對我來說工作得很好。當我爲了其他目的而必須重用對象時,我使用了DROP類。否則,我只是使用動態。 – iMatoria

+0

如何dotliquid會知道你的自定義對象的結構?我在開始寫代碼之前,先執行你在開始時寫的代碼。它不起作用。當你繼承掉一個班,你給班級滴液計劃。謝謝你,但它不適合我。 –

相關問題