Renderização do ASP.NET MVC Razor sem codificação


Respostas:


374

Desde o ASP.NET MVC 3, você pode usar:

@Html.Raw(myString)

8
Isso não é inteiramente correto. Sim, você pode inserir uma string não processada, mas se tiver, "'<>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
Daniel B. Chapman

4
Daniel, Html.Raw () "retorna marcação que não é codificada em HTML".
Lucas

1
Html.Raw () codifica as aspas ..."myAttr='hello';myInt=10"
Serge

4
NÃO codifica aspas. Além da documentação óbvia, declarando-a clara como dia ( "Esse método envolve a marcação HTML usando a classe IHtmlString, que renderiza HTML não codificado ". ) Também testei isso e as aspas não são codificadas.
James Wilkins


31

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>

10

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.


+1 Exatamente o que eu precisava! A string ainda precisa ser codificada, mas os retornos da linha precisam ser html. Obrigado!
Peter Peter

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

5

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",..)



Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.