Ich habe eine MVC 4-Anwendung, die mehrere E-Mails versendet. Ich habe zum Beispiel eine E-Mail-Vorlage zum Absenden einer Bestellung, eine Vorlage zum Stornieren einer Bestellung usw. ...
Ich habe ein Email Service
mit mehreren Methoden. Mein Controller ruft die Methode Send
auf, die wie folgt aussieht:
Die Methode Send
ruft GetContent
auf. Dies ist die Methode, die das Problem verursacht:
Ich erhalte den Fehler:
Derselbe Schlüssel wurde bereits für eine andere Vorlage verwendet!
In meiner GetContent
-Methode sollte ich einen neuen Parameter für TemplateKey
hinzufügen und diese Variable verwenden, anstatt immer htmlTemplate
? Dann könnte die new order email template
newOrderKey
und CancelOrderKey
haben, damit die E-Mail-Vorlage eine Bestellung storniert?
Dies geschieht, weil Sie denselben Vorlagenschlüssel ( "htmlTemplate"
) für mehrere verschiedene Vorlagen verwenden.
Beachten Sie, dass bei der Art, wie Sie GetContent
implementiert haben, mehrere Probleme auftreten:
Auch wenn Sie einen eindeutigen Schlüssel verwenden, z. B. die Variable template
, lösen Sie die Ausnahme aus, wenn die Vorlagen auf der Festplatte bearbeitet werden.
Leistung: Sie lesen die Vorlagendatei jedes Mal, selbst wenn die Vorlage bereits zwischengespeichert ist.
Implementieren Sie die ITemplateManager
-Schnittstelle, um Ihre Vorlagen zu verwalten:
Setup beim Start:
%Vor%Und benutze es:
%Vor% RazorEngine wird nun alle oben genannten Probleme intern beheben. Beachten Sie, dass es völlig in Ordnung ist, den Namen der Vorlage als Schlüssel zu verwenden, wenn in Ihrem Szenario der Name alles ist, was Sie zum Identifizieren einer Vorlage benötigen (andernfalls können Sie NameOnlyTemplateKey
nicht verwenden und müssen Ihre eigene Implementierung bereitstellen).
Hoffe, das hilft. (Haftungsausschluss: Mitarbeiter von RazorEngine)
Tags und Links asp.net-mvc-4 razorengine