asp.net asp.net-mvc razor html-encode

asp.net - ¿Cómo funciona Html.Raw MVC helper?



asp.net-mvc razor (2)

Utilizo Html.Raw para imprimir un contenido html en bruto, por ejemplo cuando envío algo como ViewBag.div = "<div> Hello </div>"; desde el controlador al lado de la vista, no imprime un contenido HTML sin formato a menos que use el método Html.Raw , pero si tengo un contenido codificado, como contenido codificado usando jquery e insertado en la base de datos, y quiero imprimirlo como El contenido html el método Html.Raw no funciona y tengo que usar HttpUtility.HtmlDecode(EncodedContent) antes de usar Html.Raw así que por favor alguien podría explicar por qué actúa de esta manera y cuál es la situación adecuada para usar el método Html.Raw ? o de otra manera, ¿ Html.Raw qué Html.Raw no funciona cuando recibe entidades html como un parámetro en lugar de etiquetas html ?.


Html.Raw Method le pide al Razor Engine que no codifique los caracteres especiales .

Razor Engine codifica los caracteres especiales porque considera que desea mostrarlos en el estado que le envió, por lo que codifica los caracteres especiales y el navegador los decodifica nuevamente para mostrarlos en el estado original (el estado que envió al razor engine), pero si usa el Html.Raw eso significa que le pide al motor Razor que no codifique los caracteres especiales de su contenido y en realidad eso no significa que le pida decodificar su contenido codificado, como el contenido que obtiene de la base de datos, simplemente le pide al motor que no codifique los caracteres especiales, de modo que si tiene un contenido codificado en la base de datos, debe decodificarlo usando HttpUtility.HtmlDecode y luego pedirle al motor de afeitar que no codifique las etiquetas html devueltas. mediante el uso de Html.Raw .

Por ejemplo, si tiene este contenido en su base de datos

&lt;h1&gt;dklxf;&lt;span style="font-style: italic;"&gt;kldk;dlk&lt;span style="font-weight: bold;"&gt;dxl''f;dlxd''fdlf;ldk;dlkf&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;

ahora si lo imprime sin usar HTML.Raw el motor de afeitar codificará los caracteres especiales en ese contenido para que se impriman en el navegador tal como están, pero si usa HTML.Raw significa que no debe hacer nada sobre el contenido para que el navegador los renderizará como un conjunto de etiquetas html que tienen un contenido dentro pero no un formato de datos, obtendrá algo como:

<h1>dklxf;<span style="font-style: italic;">kldk;dlk<span style="font-weight: bold;">dxl''f;dlxd''fdlf;ldk;dlkf</span></span></h1></p>

pero si usa Html.Raw(HttpUtility.HtmlDecode(EncodedContent)) , obtendrá un formato de datos en su página como el siguiente contenido porque el contenido enviado al navegador es html tags, no entidades.

dklxf; kldk; dlk dxl''f; dlxd''fdlf; ldk; dlkf


Debido a que los caracteres codificados son HTML, y la versión cruda de esa cadena es la codificada.

Html.Raw representa lo que se proporciona sin hacer ninguna codificación html, por lo que con ViewBag.div = "<div> Hello </div>"; :

@Html.Raw(ViewBag.div);

Renders

<div> Hello </div>

Sin embargo, cuando tiene caracteres codificados allí, como ViewBag.Something = "&gt;"; la versión bruta de eso es &gt; . Para volver al html real necesita Html.Raw(HttpUtility.HtmlDecode(EncodedContent)); como dijiste.

Si Html.Raw hizo la descodificación, entonces sería confuso, y necesitaríamos algo que no lo hizo. ;-)