2017-08-26 17 views
0

hereからEngine.Razorのlibを使用してC#で電子メールのテンプレートを生成しようとしています。しかし、私はそれらの主要な財産が何であるかを理解していないのですか? 私はこの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

このライブラリの使用方法や、RunCompileおよびRunのセクションを誤って解釈したため、他のドキュメントを引き続き読んでいませんでした。あなたがリンクしている作者のウェブサイトから、手順は以下の通りです。

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 - いいえ、間違って読んでいます。このように考えてみてください。文字列のモデル(名前と呼ぶ)をとる新しいユーザーの電子メールテンプレートがあります。一意の識別子とモデル値(Tommyと言うことができます)を持つ最初の項目、 'RunCompile'を呼び出します。次に、*その特定の電子メールテンプレート*を使用しなければならないときは、2番目のコマンド '.Run'を*異なるモデル値*(user1と言うことができます)で呼び出します。それぞれのテンプレートに対して 'RunCompile'を一度だけ呼び出します。それ以降は、一意のテンプレートIDに異なるモデル値で 'Run'を呼び出します。 – Tommy

関連する問題