web-dev-qa-db-fra.com

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 Razor 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?

93
KallDrexx

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, appelez simplement la méthode Raw intégrée de TemplateBase:

@Raw(Model.EmailContent)
162
Matthew Abbott

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

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

12
Tod Thomson

J'utilise RazorEngine 3.8.2 et @Raw(Model.Content) fonctionne parfaitement pour moi.

3
curious.netter

Si vous avez une classe de base personnalisée pour vos modèles, vous pouvez coder la méthode Write pour 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);
}
2
Iravanchi

Construit un wrapper pour RazorEngine qui ajoute le support pour @Html.Raw() et @Html.Partial()

https://github.com/b9chris/RazorEngineComplete

0
Chris Moschini