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:
Prueba esto:
<div class='content'>
@Html.Raw(HttpUtility.HtmlDecode(Model.Content))
</div>
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>
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);
}
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>
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.