O Razor codifica a string por padrão. Existe alguma sintaxe especial para renderização sem codificação?
O Razor codifica a string por padrão. Existe alguma sintaxe especial para renderização sem codificação?
Respostas:
Desde o ASP.NET MVC 3, você pode usar:
@Html.Raw(myString)
"myAttr='hello';myInt=10"
@(new HtmlString(myString))
Assim como a abordagem @ Html.Raw (string) já mencionada, se você produzir uma MvcHtmlString, ela não será codificada. Isso pode ser útil ao adicionar suas próprias extensões ao HtmlHelper ou ao retornar um valor do seu modelo de exibição que você sabe que pode conter html.
Por exemplo, se o seu modelo de visualização era:
public class SampleViewModel
{
public string SampleString { get; set; }
public MvcHtmlString SampleHtmlString { get; set; }
}
Para Core 1.0+ (e MVC 5+), use HtmlString
public class SampleViewModel
{
public string SampleString { get; set; }
public HtmlString SampleHtmlString { get; set; }
}
então
<!-- 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>
Use @Html.Raw()
com cuidado, pois poderá causar mais problemas com codificação e segurança. Entendo o caso de uso, pois tinha que fazer isso sozinho, mas com cuidado ... Evite permitir a passagem de todo o texto. Por exemplo, apenas preserve / converta seqüências de caracteres específicas e sempre codifique o restante:
@Html.Raw(Html.Encode(myString).Replace("\n", "<br/>"))
Então, tenha a certeza de que não criou uma falha de segurança em potencial e que caracteres especiais / estrangeiros são exibidos corretamente em todos os navegadores.
@Html.Raw(Html.Encode(myString).Replace(Html.Encode("\n"), "<br/>"))
para ASP.NET Core
No caso do ActionLink, ele geralmente usa HttpUtility.Encode no texto do link. Nesse caso, você pode usá-
HttpUtility.HtmlDecode(myString)
lo funcionou para mim ao usar o HtmlActionLink para decodificar a sequência que eu queria passar. por exemplo:
@Html.ActionLink(HttpUtility.HtmlDecode("myString","ActionName",..)
Você também pode usar o método WriteLiteral
"'<>etc...
ela será escapada. A maneira correta é usar o MvcHtmlString que permitirá caracteres "ilegais". Por exemplo, se você estiver codificação de dados Json ... sem que codifica uma modelo inteiro