用剃刀显示编码的html

时间:2011-02-17 13:02:11

标签: asp.net-mvc-3 razor html-encode

我将编码的HTML存储在数据库中。

我能正确显示它的唯一方法是:

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

这太丑了。 有没有更好的方法呢?

6 个答案:

答案 0 :(得分:146)

试试这个:

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

答案 1 :(得分:46)

使用Html.Raw()。 Phil Haack在http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx发布了一个很好的语法指南。

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

答案 2 :(得分:8)

这非常简单:

HttpUtility.HtmlDecode(Model.Content)

另一个解决方案,你也可以返回一个HTMLString,Razor会输出正确的格式:

在视图中:

@Html.GetSomeHtml()
控制器中的

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

答案 3 :(得分:7)

您也可以简单地使用HtmlString

    @(new HtmlString(Model.Content))

答案 4 :(得分:1)

  

我将编码的HTML存储在数据库中。

Imho你不应该将数据html编码存储在数据库中。只需以纯文本(未编码)存储,只显示您的数据,您的html将自动编码:

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

答案 5 :(得分:0)

我刚好用Razor和Java脚本显示反斜杠\

我的@Model.AreaName看起来像 Name1 \ Name2 \ Name3 ,所以当我显示它时,所有的反斜杠都消失了,我看到了 Name1Name2Name3

我找到了解决问题的方法:

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

请不要忘记在@using Newtonsoft.Json页面顶部添加chtml