2010-11-25 19 views
377

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 &amp;.

+62

salvar a la gente de la larga historia de la discusión a continuación - '@ Html.Raw()' –

+0

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

Respuesta

571

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 
+0

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 :( –

+1

Hola Sergio. Estoy usando MVC 3 y estoy usando el método Raw correctamente. –

+1

¡Gracias por la respuesta! Todavía estoy aprendiendo MVC 3 y me lo estaba eludiendo. –

70

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) 
+13

Prefiero este método porque HTML.Raw explota si la cadena pasada es nula. – 37Stars

+1

¡Gracias, esto es muy limpio! – Hajjat

49

Puede utilizar

@{ WriteLiteral("html string"); } 
+4

+1 para WriteLiteral, no lo sabía –

+4

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

+0

1 para WriteLiteral –

4

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()) 
8

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>&lt;script&gt;console.log('insert')&lt;/script&gt;Hello</b>)