Tengo HTML seguro / desinfectado guardado en una tabla DB.
¿Cómo puedo tener este contenido HTML escrito en una vista Razor?
Siempre se escapa de caracteres como <
y símbolos de &
.
Supongamos que su contenido está dentro de una cadena llamada mystring
…
Puedes usar:
@Html.Raw(mystring)
Alternativamente, puede convertir su cadena a HtmlString
o cualquier otro tipo que implemente IHtmlString
en modelo o directamente en línea y use @
regular:
@{ var myHtmlString = new HtmlString(mystring);} @myHtmlString
En ASP.NET MVC 3, debe hacer algo como esto:
// Say you have a bit of HTML like this in your controller: ViewBag.Stuff = "Menu " // Then you can do this in your view: @MvcHtmlString.Create(ViewBag.Stuff)
Puedes usar
@{ WriteLiteral("html string"); }
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("(" + Html.Encode("" + "Hello") + ")")
Resultados en
(<script>console.log('insert')</script>Hello)
Puede poner su cadena en viewdata en el controlador de esta manera:
ViewData["string"] = DBstring;
Y luego llame a esa viewdata a la vista de esta manera:
@Html.Raw(ViewData["string"].ToString())
Además de usar @MvcHtmlString.Create(ViewBag.Stuff)
como lo sugiere Dommer, le sugiero que también use la biblioteca AntiXSS como phill sugerido http://haacked.com/archive/2010/04/06/using-antixss-as- the-default-encoder-for-asp-net.aspx
Codifica casi toda la cadena de ataque XSS posible.