2011-01-25 22 views
41

Tengo una tabla en mi db donde una de las propiedades es una página Html (sin html, etiquetas de cabeza y cuerpo), y tengo la intención de ponerlo en el medio de una de mis vistas, por ejemplo, llamo cotroller método que toma un argumento y devuelve una vista que pasa esta cadena grande html como el modelo. He buscado por ella (no mucho, lo admito), y encontré el siguiente método:¿Es posible visualizar HTML sin formato desde la base de datos en ASP.NET MVC 3?

<%= System.Web.HttpUtility.HtmlDecode(yourEncodedHtmlFromYouDatabase) %> 

que se encontró here in stackoverflow. Cuando probé un aproach afeitar similares, terminé con esto:

@System.Web.HttpUtility.HtmlDecode("<h1>Test</h1>") 

Esa es la idea, pero no funcionó del todo como lo planeé.

+0

¿Qué significa 'yourEncodedHtmlFromYouDatabase' parece? Supongo que el HTML '

Test

' en realidad se codificaría de la siguiente manera: '& lt: h1 > Test & lt:/h1 >'. –

+0

En realidad, sería más como usar etiquetas. Todavía no tengo el db preparado, pero eso es lo que planeamos hacer, así que estoy buscando opciones. –

+0

Esta pregunta para MVC2: http://stackoverflow.com/questions/2169805/mvc2-is-there-an-html-helper-for-raw-html –

Respuesta

77

Todo lo que necesita es: @Html.Raw(yourEncodedHtmlFromYouDatabase)

Estoy asumiendo que el html en la base de datos ha sido verificada apropiadamente (o al menos de una fuente confiable), porque si no es así, usted podría estar abriendo a cruzar ataques de secuencias de comandos del sitio.

La razón por la que su enfoque no funcionó es que Razor HTML-codifica la salida por defecto (cada vez que usa @ para mostrar algo). Html.Raw le dice a Razor que confía en el HTML y que desea mostrarlo sin codificarlo (ya que es HTML sin formato).

+1

Muchas gracias. En cuanto a la seguridad, creo que no hay tal problema, ya que construiremos este html nosotros mismos. –

+0

Me alegro de poder ayudar. :) –

10

También puede devolver un HTMLString y Razor dará como resultado el formato correcto, por ejemplo.

@Html.GetSomeHtml() 

public static HtmlString GetSomeHtml() 
{ 
    var Data = "abc<br/>123"; 
    return new HtmlString(Data); 
} 

Esto le permitirá mostrar HTML

Cuestiones relacionadas