Emission de chaînes non encodées dans une vue Razor

Comme le dit ScottGu sur son blog, «par défaut, le contenu émis par un bloc @ est automatiquement codé en HTML pour mieux se protéger contre les scénarios d’attaque XSS». Ma question est la suivante: comment générer une chaîne non-HTML?

Par souci de simplicité, pls colle à ce cas simple:

@{ var html = "Click me" // I want to emit the previous ssortingng as pure HTML code... } 

Ceci est mon approche préférée:

 @Html.Raw("

my paragraph text

")

La source était la référence de syntaxe de Razor de Phil Haack: http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx

Vous pouvez créer une nouvelle instance de MvcHtmlSsortingng sans code HTML.

 @{ var html = MvcHtmlSsortingng.Create("Click me") } 

Espérons qu’il y aura un moyen plus facile pour l’avenir de Razor.

Si vous n’utilisez pas MVC, vous pouvez essayer ceci:

 @{ var html = new HtmlSsortingng("Click me") } 

new htmlSsortingng est certainement la réponse.

Nous avons examiné d’autres modifications de la syntaxe du razor, mais en fin de compte, aucun d’entre eux n’a été vraiment plus court que le nouveau HtmlSsortingng.

Nous pouvons toutefois en faire une aide. Peut-être…

 @Html.Literal("

something

")

ou

 @"

something

".AsHtml()

J’ai également rencontré ce problème lors de la transition de notre projet vers le nouveau moteur d’affichage Razor. L’approche que j’ai adoptée était légèrement différente parce que nous devions générer des données JSON à partir de C # et que nous voulions les afficher au chargement de la page.

Ce que j’ai finalement fait a été d’implémenter un RawView qui était un parallèle de View dans les fichiers cshtml. Essentiellement, pour obtenir une chaîne brute,

 @(new HtmlSsortingng(View.Foo)) // became @RawView.Foo 

Cela nécessite quelques modifications de la mise en page du projet, alors je viens de rédiger un article de blog à ce sujet ici . En bref, cela impliquait une implémentation en double du DynamicViewDataDictionary de MVC et un nouveau WebViewPage contenant le RawView. Je suis également allé de l’avant et mis en œuvre l’opérateur d’index sur le RawView pour permettre

 @RawView["Foo"] 

En dehors du hasard, quelqu’un doit parcourir les données avec une liste de clés.

En lisant le commentaire de l’infirmière, cela aurait probablement été mieux si j’avais nommé ceci comme un littéral au lieu de RawView.