ASP.NET MVC Razor render sin codificación


Razor codifica cadena por defecto. ¿Hay alguna sintaxis especial para renderizar sin codificación?

Author: SiberianGuy, 2010-11-01

7 answers

Desde ASP.NET MVC 3, puede utilizar:

@Html.Raw(myString)
 345
Author: Lucas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-26 15:32:34
@(new HtmlString(myString))
 52
Author: Matthew Vines,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-01 17:53:37

Así como el ya mencionado @Html.Enfoque Raw (string), si genera un MvcHtmlString no se codificará. Esto puede ser útil cuando agregue sus propias extensiones al HtmlHelper, o cuando devuelva 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; }
}

Entonces

<!-- 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>
 28
Author: Jonathan Moffatt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-29 08:05:06

Use @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... Simplemente evite permitir que todo el texto pase. Por ejemplo, solo conserva / convierte secuencias de caracteres específicas y siempre codifica el resto:

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

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

 10
Author: Tony Wall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-06 21:43:45

En el caso de ActionLink, generalmente utiliza HttpUtility.Codifique en el texto del enlace. En ese caso puede utilizar HttpUtility.HtmlDecode(myString) me funcionó cuando usé HtmlActionLink para decodificar la cadena que quería pasar. eg:

  @Html.ActionLink(HttpUtility.HtmlDecode("myString","ActionName",..)
 4
Author: gutsy_guy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-09 06:14:44

También puede usar el método WriteLiteral

 1
Author: Hamid Shahid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-21 14:16:18

HTML RAW:

@Html.Raw(yourString)
 0
Author: Farbod,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-07 15:09:55