Mam aplikację MVC 4, która wysyła wiele wiadomości e-mail. Na przykład mam szablon wiadomości e-mail do przesyłania zamówienia, szablon do anulowania zamówienia itp.Błąd RazorEngine podczas próby wysłania wiadomości e-mail
Mam Email Service
z wieloma metodami. Mój kontroler wywołuje metodę Send
który wygląda tak:
public virtual void Send(List<string> recipients, string subject, string template, object data)
{
...
string html = GetContent(template, data);
...
}
Sposób Send
wzywa GetContent
, która to metoda powoduje problem:
private string GetContent(string template, object data)
{
string path = Path.Combine(BaseTemplatePath, string.Format("{0}{1}", template, ".html.cshtml"));
string content = File.ReadAllText(path);
return Engine.Razor.RunCompile(content, "htmlTemplate", null, data);
}
Otrzymuję błąd:
The same key was already used for another template!
W mojej metodzie GetContent
należy dodać nowy parametr dla TemplateKey
i użyć tej zmiennej zamiast zamiast zawsze używać htmlTemplate
? Następnie new order email template
może mieć newOrderKey
i CancelOrderKey
dla szablonu e-mail używanego do anulowania zamówienia?
Dziękuję bardzo, to bardzo pomaga! Zaimplementowałem interfejs 'ITemplateManager' i usunąłem metodę" GetContent ", tak jak powiedziałeś. Czy powyższa sekcja 'setup on startup' działa w' Send() '? – Andrew
Powinien przejść do konfiguracji aplikacji, w której jest wykonywany 'once' i' before' przy użyciu właściwości 'Engine.Razor'.Jednak konkretna lokalizacja zależy od twojej aplikacji: na przykład użyj statycznego konstruktora lub dodaj go na początku 'Main' w aplikacji konsolowej – matthid
Ahh w porządku, to jest coś, co myślałem po tym, jak opuściłem komentarz. Umieszczę go w metodzie 'Application_Start()' w moim projekcie MVC. Nadal utrzymuję linię 'Engine.Razor.RunCompile' w' GetContent() ', poprawne? – Andrew