Rendu ASP.NET MVC Razor sans encodage


Réponses:


374

Depuis ASP.NET MVC 3, vous pouvez utiliser:

@Html.Raw(myString)

8
Ce n'est pas tout à fait correct. Oui, vous pouvez insérer une chaîne brute mais si vous en avez, "'<>etc...elle sera échappée. La bonne façon est d'utiliser le MvcHtmlString qui autorisera les caractères "illégaux". Par exemple, si vous encodez des données Json ... sans encoder un modèle entier
— Daniel B. Chapman

4
Daniel, Html.Raw () "renvoie un balisage qui n'est pas codé en HTML."
— Lucas

1
Html.Raw () encode les guillemets ..."myAttr='hello';myInt=10"
— Serge

4
Il n'encode PAS les guillemets. En plus de la documentation évidente indiquant qu'il clair comme le jour ( « Cette méthode enveloppe HTML balisage en utilisant la classe IHtmlString, ce qui rend non codé HTML. » ) J'ai aussi testé cela et devis ne sont pas codés.
— James Wilkins


31

En plus de l'approche @ Html.Raw (chaîne) déjà mentionnée, si vous générez un MvcHtmlString, il ne sera pas codé. Cela peut être utile lors de l'ajout de vos propres extensions à HtmlHelper, ou lors du retour d'une valeur de votre modèle de vue qui, vous le savez, peut contenir du html.

Par exemple, si votre modèle de vue était:

public class SampleViewModel
{
  public string SampleString { get; set; }
  public MvcHtmlString SampleHtmlString { get; set; }
}

Pour Core 1.0+ (et MVC 5+), utilisez HtmlString

public class SampleViewModel
{
  public string SampleString { get; set; }
  public HtmlString SampleHtmlString { get; set; }
}

puis

<!-- this will be encoded -->
<div>@Model.SampleString</div>
<!-- this will not be encoded -->
<div>@Html.Raw(Model.SampleString)</div>
<!-- this will not be encoded either -->
<div>@Model.SampleHtmlString</div>

10

À utiliser @Html.Raw()avec prudence car vous pourriez causer plus de problèmes d'encodage et de sécurité. Je comprends le cas d'utilisation car je devais le faire moi-même, mais soigneusement ... Évitez simplement de laisser passer tout le texte. Par exemple, ne conservez / convertissez que des séquences de caractères spécifiques et codez toujours le reste:

@Html.Raw(Html.Encode(myString).Replace("\n", "<br/>"))

Ensuite, vous avez la tranquillité d'esprit que vous n'avez pas créé de faille de sécurité potentielle et tous les caractères spéciaux / étrangers s'affichent correctement dans tous les navigateurs.


+1 Exactement ce dont j'avais besoin! La chaîne doit encore être encodée mais la ligne renvoyée doit être html. Merci!
— Peter

@Html.Raw(Html.Encode(myString).Replace(Html.Encode("\n"), "<br/>"))pour ASP.NET Core
— kenjiuno

5

Dans le cas d'ActionLink, il utilise généralement HttpUtility.Encode sur le texte du lien. Dans ce cas, vous pouvez l'utiliser, HttpUtility.HtmlDecode(myString) cela a fonctionné pour moi lorsque vous utilisez HtmlActionLink pour décoder la chaîne que je voulais transmettre. par exemple:

  @Html.ActionLink(HttpUtility.HtmlDecode("myString","ActionName",..)



En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.