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?

Respuestas:


154

Prueba esto:

<div class='content'>    
   @Html.Raw(HttpUtility.HtmlDecode(Model.Content))
</div>

¡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>

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);
}

8

También puedes simplemente usar la HtmlStringclase

    @(new HtmlString(Model.Content))

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>

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.