Le rasoir code la chaîne par défaut. Existe-t-il une syntaxe spéciale pour le rendu sans encodage?
Le rasoir code la chaîne par défaut. Existe-t-il une syntaxe spéciale pour le rendu sans encodage?
Réponses:
Depuis ASP.NET MVC 3, vous pouvez utiliser:
@Html.Raw(myString)
"myAttr='hello';myInt=10"
@(new HtmlString(myString))
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>
À 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.
@Html.Raw(Html.Encode(myString).Replace(Html.Encode("\n"), "<br/>"))
pour ASP.NET Core
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",..)
Vous pouvez également utiliser la méthode WriteLiteral
"'<>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