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.