ASP.NET MVC Razor render sin encoding

Razor codifica cadena por defecto. ¿Hay alguna syntax especial para renderizar sin encoding?

Desde ASP.NET MVC 3, puede usar:

@Html.Raw(myString) 
 @(new HtmlString(myString)) 

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

Por ejemplo, si su modelo de vista fue:

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

entonces

  
@Model.SampleString
@Html.Raw(Model.SampleString)
@Model.SampleHtmlString

Use @Html.Raw() con precaución ya que puede causar más problemas con la encoding y la seguridad. Entiendo el caso de uso, ya que tuve que hacer esto yo solo, pero cuidadosamente … Solo evite permitir que todo el texto pase. Por ejemplo, solo conserva / convierte secuencias de caracteres específicos y siempre codifica el rest:

 @Html.Raw(Html.Encode(myString).Replace("\n", "
"))

Luego, tiene la tranquilidad de que no ha creado un agujero de seguridad potencial y cualquier carácter especial / extraño se muestra correctamente en todos los navegadores.

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

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

También puede usar el método WriteLiteral

HTML RAW:

 @Html.Raw(yourString)