web-dev-qa-db-fra.com

ASP.NET MVC Razor rendu sans codage

Razor code la chaîne par défaut. Existe-t-il une syntaxe spéciale pour rendre sans codage?

241
SiberianGuy

Depuis ASP.NET MVC 3, vous pouvez utiliser:

@Html.Raw(myString)
362
Lucas
@(new HtmlString(myString))
57
Matthew Vines

De même que l'approche @ Html.Raw (chaîne) déjà mentionnée, si vous éditez un MvcHtmlString, il ne sera pas codé. Cela peut être utile lors de l'ajout de vos propres extensions à HtmlHelper ou lors du renvoi d'une valeur de votre modèle de vue pouvant contenir du code 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; }
}

ensuite

<!-- 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>
30
Jonathan Moffatt

Utilisez @Html.Raw() avec prudence, car vous risqueriez de causer davantage de problèmes d’encodage et de sécurité. Je comprends le cas d'utilisation car je devais le faire moi-même, mais avec précaution ... Évitez simplement de laisser passer tout le texte. Par exemple, conservez/convertissez uniquement des séquences de caractères spécifiques et encodez toujours le reste:

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

Vous avez alors la certitude que vous n’avez pas créé de brèche de sécurité et que tous les caractères spéciaux/étrangers sont correctement affichés dans tous les navigateurs.

10
Tony Wall

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

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

Vous pouvez également utiliser la méthode WriteLiteral

1
Hamid Shahid

HTML RAW:

@Html.Raw(yourString)
0
Farbod