Tengo HTML seguro / desinfectado guardado en una tabla DB.
¿Cómo puedo escribir este contenido HTML en una vista Razor?
Siempre escapa a personajes como <
y hacia símbolos &
.
Tengo HTML seguro / desinfectado guardado en una tabla DB.
¿Cómo puedo escribir este contenido HTML en una vista Razor?
Siempre escapa a personajes como <
y hacia símbolos &
.
Respuestas:
Supongamos que su contenido está dentro de una cadena llamada mystring
...
Puedes usar:
@Html.Raw(mystring)
Alternativamente, puede convertir su cadena a HtmlString
cualquier otro tipo que se implemente IHtmlString
en el modelo o directamente en línea y usar regular @
:
@{ var myHtmlString = new HtmlString(mystring);}
@myHtmlString
razor
sintaxis y Html.Raw
definitivamente estoy disponible para mí.
En ASP.NET MVC 3, 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)
Puedes usar
@{ WriteLiteral("html string"); }
Html.Raw()
no funciona allí
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 aterradoras.
@Html.Raw("(<b>" + Html.Encode("<script>console.log('insert')</script>" + "Hello") + "</b>)")
Resultados en
(<b><script>console.log('insert')</script>Hello</b>)
Además de usar @MvcHtmlString.Create(ViewBag.Stuff)
según lo sugerido por Dommer, le sugiero que también use la biblioteca AntiXSS como sugerencia phill 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.
Ejemplo completo para usar funciones de plantilla en RazorEngine (para la generación de correo electrónico, por ejemplo):
@model SomeModel
@{
Func<PropertyChangeInfo, object> PropInfo =
@<tr class="property">
<td>
@item.PropertyName
</td>
<td class="value">
<small class="old">@item.OldValue</small>
<small class="new">@item.CurrentValue</small>
</td>
</tr>;
}
<body>
@{ WriteLiteral(PropInfo(new PropertyChangeInfo("p1", @Model.Id, 2)).ToString()); }
</body>
@Html.Raw()