Mostrar html codificado con razor

79

Guardo HTML codificado en la base de datos.

La única forma en que podría mostrarlo correctamente es:

<div class='content'>    
   @MvcHtmlString.Create(HttpUtility.HtmlDecode(Model.Content));
</div>

Es feo. ¿Hay alguna forma mejor de hacer esto?

Jani
fuente

Respuestas:

154

Prueba esto:

<div class='content'>    
   @Html.Raw(HttpUtility.HtmlDecode(Model.Content))
</div>
Amitabh
fuente
¡Gracias! Esto es mejor, pero aún no es lo que estoy buscando.
Jani
8
Terminé haciendo un método de extensión de acuerdo con esta idea. @ Html.RawDecode (Model.Content)
Jani
3
Solo evita; al final
Giovanny Farto M.
Esto funciona pero está tan sucio ... terminó haciendo un método de extensión con esto envuelto, ¿alguien puede explicar por qué no funciona el .Raw?
Egli Becerra
48

Utilizar Html.Raw() . Phil Haack publicó una buena guía de sintaxis en http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx .

<div class='content'>
    @Html.Raw( Model.Content )
</div>
tvanfosson
fuente
1
Gracias por la respuesta. Pero creo que el Html.Raw () es 'mostrar como está, no codificar'. Entonces, si uso esto, no puedo decodificar mi html antes de guardarlo en la base de datos. Por lo tanto, mostrará el contenido ingresado por el usuario sin ningún control de 'seguridad'. Entonces creo que esta no es la mejor solución.
Jani
9

esto es bastante simple:

HttpUtility.HtmlDecode(Model.Content)

Otra solución, también puede devolver un HTMLString, Razor generará el formato correcto:

en la vista misma:

@Html.GetSomeHtml()

en controlador:

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

También puedes simplemente usar la HtmlStringclase

    @(new HtmlString(Model.Content))
Bellash
fuente
0

Guardo HTML codificado en la base de datos.

En mi humilde opinión, no debe almacenar sus datos codificados en html en la base de datos. Simplemente almacene en texto plano (no codificado) y muestre sus datos de esta manera y su html se codificará automáticamente:

<div class='content'>
    @Model.Content
</div>
Mcanic
fuente
0

Acabo de recibir otro caso para mostrar la barra invertida \con Razor y Java Script.

Mi @Model.AreaNameaspecto es Nombre1 \ Nombre2 \ Nombre3, así que cuando lo muestro , todas las barras invertidas desaparecen y veo Name1Name2Name3

Encontré una solución para solucionarlo:

var areafullName =  JSON.parse("@Html.Raw(HttpUtility.JavaScriptStringEncode(JsonConvert.SerializeObject(Model.AreaName)))");

No olvide agregar @using Newtonsoft.Jsonen la parte superior de la chtmlpágina.

DmitryBoyko
fuente