99 votes

Comment puis-je générer du code HTML brut lors de l'utilisation de RazorEngine (PAS de MVC)

J'essaie de générer des emails avec un contenu HTML. ce contenu a déjà été traité en assainissement, je ne suis donc pas inquiet à cet égard, mais lorsque j'appelle:

 Razor.Parse(template, model);
 

sur le modèle de rasoir suivant:

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

le courrier électronique généré est codé en HTMl, mais il me faut le décoder. Comment puis-je accomplir cela?

174voto

Matthew Abbott Points 32861

RazorEngine, comme le moteur Razor View Engine de MVC, encodera automatiquement les valeurs écrites dans le modèle. Pour contourner ce problème, nous avons introduit une interface appelée IEncodedString , les implémentations par défaut étant HtmlEncodedString et RawString .

Pour utiliser ce dernier, il suffit de faire un appel à la intégré Raw méthode de TemplateBase :

 @Raw(Model.EmailContent)
 

12voto

Tod Thomson Points 1145

Pour info, j'ai un fork qui inclut la syntaxe @ Html.Raw (...) ici:

https://github.com/Antaris/RazorEngine/pull/105

3voto

Iravanchi Points 1264

Si vous avez une classe de base personnalisée pour vos modèles, vous pouvez coder la méthode Write afin qu'elle se comporte comme un modèle MVC normal: si la valeur en sortie est IHtmlString elle ne devrait pas l'encoder.

Voici le code que j'utilise dans ma 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);
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X