440 votes

Écriture/sortie de chaînes HTML non encodées

J'ai un HTML sécurisé/sanitaire enregistré dans une table de la base de données.

Comment puis-je faire écrire ce contenu HTML dans une vue Razor ?

Il échappe toujours à des personnages comme < et les esperluettes à &amp; .

78 votes

Pour épargner aux gens la longue histoire de la discussion ci-dessous - @Html.Raw()

0 votes

Pour éviter que des personnes comme moi essaient de faire cela avec des types anonymes dans des vues typées dynamiquement, où cela ne fonctionnera pas - cf. cette réponse à ma question plus spécifique. Bien que l'utilisation de cette approche avec une vue fortement typée soit toujours préférable si votre situation le permet.

664voto

Lorenzo Points 12167

Supposons que votre contenu se trouve dans une chaîne nommée mystring ...

Vous pouvez utiliser :

@Html.Raw(mystring)

Vous pouvez également convertir votre chaîne en HtmlString ou tout autre type qui implémente IHtmlString dans le modèle ou directement en ligne et utiliser les régulières @ :

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

0 votes

Merci pour cette réponse. Elle m'a aidé à terminer une petite tâche que j'étais en train d'apprendre :) Cependant, j'utilise la dernière version de MVC3 et jusqu'à présent, pas de Html.Raw :(

1 votes

Bonjour Sergio. J'utilise MVC 3 et j'utilise la méthode Raw correctement.

1 votes

Merci pour la réponse ! Je suis encore en train d'apprendre MVC 3 et cela m'échappait.

75voto

Tom Chantler Points 8266

En ASP.NET MVC 3, vous devriez faire quelque chose comme ceci :

// Say you have a bit of HTML like this in your controller:
ViewBag.Stuff = "<li>Menu</li>"
//  Then you can do this in your view:
@MvcHtmlString.Create(ViewBag.Stuff)

15 votes

Je préfère cette méthode car HTML.Raw s'effondre si la chaîne passée est nulle.

1 votes

Merci, c'est très propre !

71voto

Andrus Points 2693

Vous pouvez utiliser

@{ WriteLiteral("html string"); }

5 votes

C'était génial pour moi, j'utilisais Razor dans une application Hangfire pour envoyer des emails... Html.Raw() ne travaille pas là

0 votes

1 pour WriteLiteral

11voto

Travis J Points 28588

Parfois, il peut être délicat d'utiliser du html brut. Principalement à cause de la vulnérabilité XSS. Si c'est un problème, mais que vous voulez quand même utiliser du html brut, vous pouvez coder les parties qui font peur.

@Html.Raw("(<b>" + Html.Encode("<script>console.log('insert')</script>" + "Hello") + "</b>)")

Résultats en

(<b>&lt;script&gt;console.log('insert')&lt;/script&gt;Hello</b>)

4voto

Ajay Points 97

Vous pouvez mettre votre chaîne dans les données du contrôleur comme ceci :

 ViewData["string"] = DBstring;

Et ensuite appeler cette donnée dans la vue comme ceci :

@Html.Raw(ViewData["string"].ToString())

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