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

250

O Razor codifica a string por padrão. Existe alguma sintaxe especial para renderização sem codificação?

SiberianGuy
fonte

Respostas:

374

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

@Html.Raw(myString)
Lucas
fonte
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
58
@(new HtmlString(myString))
Matthew Vines
fonte
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>
Jonathan Moffatt
fonte
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.

Tony Wall
fonte
+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",..)

gutsy_guy
fonte
1

Você também pode usar o método WriteLiteral

Hamid Shahid
fonte
1

RAW HTML:

@Html.Raw(yourString)
Farbod
fonte