2017-08-26 102 views
0

我想在C#中使用從here Engine.Razor lib的電子郵件生成模板。但我不明白他們的主要財產是什麼? 按照文檔我運行像這樣Engine.Razor拋出異常使用相同的鍵多次使用

emailBody = Engine.Razor.RunCompile(emailBodyText, "SomeKey", null, new { SomeVariable = 3 }); 

它會生成一個名爲「SomeKey」一些緩存的關鍵!我真的不需要這個!但是它在參數中是必需的。

但我遇到的問題是,我生成多個電子郵件後,我得到一個異常說,該密鑰已經生成。所以,每次我生成一封電子郵件時,我是否會拋出一個獨特的價值,或者我在這裏錯過了關於這個圖書館使用的東西?

舊文檔說要使用.Parse(不需要密鑰),但Visual Studio將其顯示爲已棄用!

string result = Razor.Parse(template, new { Name = "World" }); 

所以我很害怕使用這種方法,即使它工作!

回答

1

您沒有繼續閱讀關於如何使用該庫的其他文檔或者錯誤地解釋了RunCompileRun部分。從您鏈接的作者網站,步驟如下。

string template = "Hello @Model.Name, welcome to RazorEngine!"; 
var result = 
    Engine.Razor.RunCompile(template, "templateKey", null, new { Name = "World" }); 

這裏使用的RunCompile方法是一個擴展方法,你需要 打開RazorEngine.Templating命名空間。

「templateKey」必須是唯一的,並且在運行上述示例 後,您可以使用此密鑰重新運行緩存模板

// using RazorEngine.Templating; // Dont forget to include this. 
var result = 
    Engine.Razor.Run("templateKey", null, new { Name = "Max" }); 

注意,筆者運行了新的模型值模板接下來的時間,他呼籲Engine.Razor.Run。如果您再次撥打RunCompile,則需要另一個唯一密鑰。

+0

這真是令人困惑!每次我生成電子郵件模板時,它都會與之前的不同。恩。我的用戶登錄可能會生成一封電子郵件,發送它,然後30秒後生成另一封電子郵件。此電子郵件將有不同的模型信息,所以我需要一個新的模板。所以如果我理解你的答案,我需要在每次使用RunCompile時使用templateKey名稱中的唯一標識符?恩。 「templateKey」+ DateTime.Now.ToString() – user1186050

+0

緩存所有這些模板似乎有點浪費! – user1186050

+0

@ user1186050 - 不,您正在讀取它不正確。這樣想一想。您有一個新的用戶電子郵件模板,它接受一個字符串模型(稱之爲名稱)。你可以使用唯一的標識符和模型值來調用第一項「RunCompile」(可以說Tommy)。現在,下一次您必須使用*特定的電子郵件模板*時,可以使用*不同模型值*(可以說user1)調用第二個命令'.Run'。您爲每個模板調用'RunCompile'一次且僅一次。從此之後,您可以在唯一的模板ID上使用不同的模型值調用'Run'。 – Tommy