Tengo HTML seguro/desinfectado guardado en una tabla DB.Escritura/salida de cadenas HTML sin guardar
¿Cómo puedo tener este contenido HTML escrito en una vista Razor?
Siempre se escapa caracteres como <
y símbolos y entre &
.
Tengo HTML seguro/desinfectado guardado en una tabla DB.Escritura/salida de cadenas HTML sin guardar
¿Cómo puedo tener este contenido HTML escrito en una vista Razor?
Siempre se escapa caracteres como <
y símbolos y entre &
.
Suponiendo que su contenido está dentro de una cadena denominada mystring
...
que puede utilizar:
@Html.Raw(mystring)
Alternativamente, usted puede convertir su cadena a HtmlString
o cualquier otro tipo que implementa IHtmlString
en el modelo o directamente en línea y el uso regular @
:
@{ var myHtmlString = new HtmlString(mystring);}
@myHtmlString
Gracias por esta respuesta. Me ayudó a terminar una pequeña tarea que estaba aprendiendo. :) Sin embargo estoy usando la última versión de MVC3 y hasta ahora no Html.Raw :( –
Hola Sergio. Estoy usando MVC 3 y estoy usando el método Raw correctamente. –
¡Gracias por la respuesta! Todavía estoy aprendiendo MVC 3 y me lo estaba eludiendo. –
En ASP.NET MVC 3 Usted debe hacer algo como esto:
// Say you have a bit of HTML like this in your controller:
ViewBag.Stuff = "<li>Menu</li>"
// Then you can do this in your view:
@MvcHtmlString.Create(ViewBag.Stuff)
Aparte de utilizar @MvcHtmlString.Create(ViewBag.Stuff)
según lo sugerido por Dommer, le sugiero que utilice también AntiXSS biblioteca como Phill sugerido http://haacked.com/archive/2010/04/06/using-antixss-as-the-default-encoder-for-asp-net.aspx
Codifica casi toda la posible cadena de ataque XSS.
¿ASP.NET MVC ya no maneja la mayoría de las vulnerabilidades XSS? – William
Puede utilizar
@{ WriteLiteral("html string"); }
+1 para WriteLiteral, no lo sabía –
Esto fue increíble para mí, estaba usando Razor dentro de una aplicación Hangfire para enviar correos electrónicos ... 'Html.Raw()' no funciona allí – shanabus
1 para WriteLiteral –
Usted puede poner su cadena en viewdata controlador de la siguiente manera:
ViewData["string"] = DBstring;
Y luego llamar a ese viewdata en vista de esta manera:
@Html.Raw(ViewData["string"].ToString())
A veces puede ser complicado usar html sin formato. Principalmente debido a la vulnerabilidad XSS. Si eso es una preocupación, pero aún desea usar HTML sin procesar, puede codificar las partes que dan miedo.
@Html.Raw("(<b>" + Html.Encode("<script>console.log('insert')</script>" + "Hello") + "</b>)")
Resultados en
(<b><script>console.log('insert')</script>Hello</b>)
salvar a la gente de la larga historia de la discusión a continuación - '@ Html.Raw()' –
Para guardar la gente como yo tratando de hacer esto con con los tipos anónimos en tipado dinámico vistas, donde esto no funcionará - vea [esta respuesta] (http://stackoverflow.com/a/31306368/957950) a mi pregunta más específica. Aunque el uso de este enfoque con una vista fuertemente tipada es aún mejor si tu situación lo permite. – brichins