I store encoded HTML in the database.
The only way i could display it correctly is :
<div class='content'> @MvcHtmlString.Create(HttpUtility.HtmlDecode(Model.Content)); </div>
It's ugly. Is there any better way to do this?
Use Html.Raw(). Phil Haack posted a nice syntax guide at http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx.
Html.Raw()
<div class='content'> @Html.Raw( Model.Content ) </div>
Try this:
<div class='content'> @Html.Raw(HttpUtility.HtmlDecode(Model.Content)) </div>
this is pretty simple:
HttpUtility.HtmlDecode(Model.Content)
Another Solution, you could also return a HTMLString, Razor will output the correct formatting:
in the view itself:
@Html.GetSomeHtml()
in controller:
public static HtmlString GetSomeHtml() { var Data = "abc<br/>123"; return new HtmlString(Data); }
You can also simply use the HtmlString class
HtmlString
@(new HtmlString(Model.Content))
Imho you should not store your data html-encoded in the database. Just store in plain text (not encoded) and just display your data like this and your html will be automatically encoded:
<div class='content'> @Model.Content </div>
I just got another case to display backslash \ with Razor and Java Script.
\
My @Model.AreaName looks like Name1\Name2\Name3 so when I display it all backslashes are gone and I see Name1Name2Name3
@Model.AreaName
I found solution to fix it:
var areafullName = JSON.parse("@Html.Raw(HttpUtility.JavaScriptStringEncode(JsonConvert.SerializeObject(Model.AreaName)))");
Don't forget to add @using Newtonsoft.Json on top of chtml page.
@using Newtonsoft.Json
chtml