ASP.NET MVC Razor render sin codificación


Respuestas:


374

Desde ASP.NET MVC 3, puede usar:

@Html.Raw(myString)

8
Esto no es del todo correcto. Sí, puede insertar una cadena sin formato, pero si tiene "'<>etc...estos se escaparán. La forma correcta es usar MvcHtmlString que permitirá caracteres "ilegales". Por ejemplo, si está codificando datos Json ... sin codificar un modelo completo
Daniel B. Chapman

44
Daniel, Html.Raw () "devuelve un marcado que no está codificado en HTML".
Lucas

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

44
NO codifica comillas. Además de la documentación obvia que lo indica como el día ( "Este método envuelve el marcado HTML usando la clase IHtmlString, que representa HTML no codificado " ). También probé esto y las citas no están codificadas.
James Wilkins, el


31

Además del enfoque @ Html.Raw (string) ya mencionado, si genera un MvcHtmlString no se codificará. Esto puede ser útil al agregar sus propias extensiones a HtmlHelper, o al devolver un valor de su modelo de vista que sabe que puede contener html.

Por ejemplo, si su modelo de vista era:

public class SampleViewModel
{
  public string SampleString { get; set; }
  public MvcHtmlString SampleHtmlString { get; set; }
}

Para Core 1.0+ (y MVC 5+) use HtmlString

public class SampleViewModel
{
  public string SampleString { get; set; }
  public HtmlString SampleHtmlString { get; set; }
}

luego

<!-- 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

Úselo @Html.Raw()con precaución ya que puede causar más problemas con la codificación y la seguridad. Entiendo el caso de uso ya que tuve que hacerlo yo mismo, pero con cuidado ... Solo evite dejar pasar todo el texto. Por ejemplo, solo preserva / convierte secuencias de caracteres específicas y siempre codifica el resto:

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

Entonces tiene la tranquilidad de que no ha creado un agujero de seguridad potencial y que los caracteres especiales / extranjeros se muestran correctamente en todos los navegadores.


+1 ¡Exactamente lo que necesitaba! La cadena aún necesita ser codificada, pero los retornos de línea deben ser html. ¡Gracias!
Peter

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

5

En el caso de ActionLink, generalmente usa HttpUtility.Encode en el texto del enlace. En ese caso, puede usarlo HttpUtility.HtmlDecode(myString) , funcionó para mí cuando use HtmlActionLink para decodificar la cadena que quería pasar. p.ej:

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



Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.