76 votes

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

Comme ScottGu dit dans son blog après «par le contenu par défaut émis en utilisant un bloc @ est automatiquement HTML codé pour mieux protéger contre les scénarios d'attaque XSS». Ma question est la suivante: comment pouvez-vous générer une chaîne non codée au format HTML?

Par souci de simplicité, les pls s'en tiennent à ce cas simple:

 @{
 var html = "<a href='#'>Click me</a>"
 // I want to emit the previous string as pure HTML code...
}
 

108voto

Miguel Vitorino Points 2065

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

 @Html.Raw("<p>my paragraph text</p>")
 

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

17voto

simplyio Points 1570

Vous pouvez créer une nouvelle instance de MvcHtmlString qui ne sera pas codée en HTML.

 @{
  var html = MvcHtmlString.Create("<a href='#'>Click me</a>")
}
 

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

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

 @{
  var html = new HtmlString("<a href='#'>Click me</a>")
}
 

6voto

Erik Porter Points 1318

Le nouveau HtmlString est la solution.

Nous avons examiné d'autres modifications de la syntaxe du rasoir, mais aucun d'entre eux n'a finalement été plus court que le nouveau HtmlString.

Nous pouvons, cependant, envelopper cela dans une aide. Peut-être...

 @Html.Literal("<p>something</p>")
 

ou

 @"<p>something</p>".AsHtml()
 

0voto

Anh-Kiet Ngo Points 1901

J'ai rencontré ce problème lors de la transition de notre projet pour le nouveau Rasoir moteur d'affichage. L'approche que j'ai pris était légèrement différent parce que nous avons eu pour générer des données JSON à partir de C# et je voulais sortie lors du chargement de la page.

Ce que j'ai finalement a été de mettre en œuvre un RawView c'était une parallèle de Vue à l'intérieur de la cshtml fichiers. Essentiellement, pour obtenir une chaîne brute,

@(new HtmlString(View.Foo))

// became
@RawView.Foo

Cela nécessite quelques modifications à la présentation de projet, donc je viens d'écrire un billet de blog à ce sujet ici. En bref, ce qui exige une double mise en œuvre de la MVC du DynamicViewDataDictionary et une nouvelle WebViewPage qui contient le RawView. Je suis aussi allé de l'avant et de mise en œuvre de l'index de l'opérateur sur le RawView pour permettre

@RawView["Foo"]

Dans le cas peu probable que quelqu'un a besoin de faire une boucle sur les données avec une liste de clés.

La lecture anurse commentaire, il aurait probablement été mieux si j'avais nommé cet littéralement au lieu de RawView.

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: