2012-03-12 2 views
85

Sto provando a generare e-mail con contenuto HTML. Questo contenuto è già passato attraverso servizi igienico-sanitari, quindi non sono preoccupato al riguardo, tuttavia quando io chiamo:Come output HTML grezzo quando si utilizza RazorEngine (NON da MVC)

Razor.Parse(template, model); 

sul seguente modello di rasoio:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<html> 
    <body> 
     @(new System.Web.HtmlString(Model.EmailContent)) 
    </body> 
</html> 

l'e-mail che viene emesso è codificato HTML, ma ne ho bisogno decodificato. Come posso realizzare questo?

+0

Ho risposto a questo, ma è stato eliminato come risposta doppia perché ho risposto qui: http://stackoverflow.com/questions/23603593/razorengine-cannot-use-html-raw ... questa risposta funziona sia per MVC e RazorEngine. –

risposta

152

RazorEngine, come Razor View Engine di MVC, codificherà automaticamente i valori scritti nel modello. Per ovviare a questo, abbiamo introdotto un'interfaccia chiamata IEncodedString, con le implementazioni predefinite da HtmlEncodedString e RawString.

Per utilizzare quest'ultimo, semplicemente effettuare una chiamata al Raw metodo integrato di TemplateBase:

@Raw(Model.EmailContent) 
+0

Eccellente che ha funzionato! Grazie – KallDrexx

+0

Grazie! Mi hai salvato la giornata! – Sergey

+0

Salvato anche la mia giornata! – Ozzy

2

Se si dispone di una classe base personalizzata per i modelli, è possibile codificare Write metodo a comportarsi simile al normale modello MVC: se il valore di uscita è IHtmlString non dovrebbe Enco de it.

Ecco il codice che sto usando nella mia classe TemplateBase:

// Writes the results of expressions like: "@foo.Bar" 
public virtual void Write(object value) 
{ 
    if (value is IHtmlString) 
     WriteLiteral(value); 
    else 
     WriteLiteral(AntiXssEncoder.HtmlEncode(value.ToString(), false)); 
} 

// Writes literals like markup: "<p>Foo</p>" 
public virtual void WriteLiteral(object value) 
{ 
    Buffer.Append(value); 
} 
0

ho trovato tutte queste lavorato con me.

@{var myHtmlString = new HtmlString(res);} 
@myHtmlString 


    @MvcHtmlString.Create(res) 

    @Html.Raw(res) 
+3

Si sta utilizzando la libreria MVC che non è disponibile dal motore del rasoio, quindi questa non è una risposta alla domanda. – oligofren

0

Sto usando RazorEngine 3.8.2 e @Raw(Model.Content) sta funzionando perfettamente bene per me.