Possiedo un'applicazione MVC 4 che invia più e-mail. Ad esempio, ho un modello di email per l'invio di un ordine, un modello per la cancellazione di un ordine, ecc ...Errore RazorEngine durante il tentativo di inviare e-mail
Ho un Email Service
con più metodi. Il mio controller chiama il metodo Send
che assomiglia a questo:
public virtual void Send(List<string> recipients, string subject, string template, object data)
{
...
string html = GetContent(template, data);
...
}
Il metodo Send
chiama GetContent
, che è il metodo che causa il problema:
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);
}
sto ricevendo l'errore:
The same key was already used for another template!
Nel mio metodo GetContent
dovrei aggiungere un nuovo parametro per lo TemplateKey
e usare quella variabile Le invece di usare sempre htmlTemplate
? Quindi lo new order email template
potrebbe avere newOrderKey
e CancelOrderKey
per il modello di email utilizzato per annullare un ordine?
Grazie mille, questo aiuta molto! Ho implementato l'interfaccia 'ITemplateManager' e ho rimosso il metodo' GetContent' come hai detto tu. La sezione "setup on startup" di cui sopra è disponibile in 'Send()'? – Andrew
Dovrebbe andare nella configurazione dell'applicazione dove viene eseguito 'once' e' before' usando la proprietà 'Engine.Razor'.Tuttavia, la posizione concreta dipende dall'applicazione: Ad esempio, utilizzare un costruttore statico o aggiungerlo all'inizio di "Main" in un'applicazione console – matthid
Ahh okay, è una cosa che pensavo dopo aver lasciato il commento. Lo inserirò nel metodo 'Application_Start()' nel mio progetto MVC. Continuo a mantenere la riga 'Engine.Razor.RunCompile' in' GetContent() ', corretta? – Andrew