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.