用剃刀显示编码的HTML


79

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

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

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

它很丑。有什么更好的方法吗?

Answers:


154

尝试这个:

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

谢谢!这更好,但仍然不是我想要的。
詹妮2011年

8
我最终根据此想法制作了扩展方法。@ Html.RawDecode(Model.Content)
jani 2011年

3
只是避免; 最后
Giovanny Farto M.

这行得通,但它是如此肮脏...最终用这种包装制作了一种Extension方法,有人可以解释为什么.Raw不能正常工作吗?
Egli Becerra

48

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

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

1
感谢您的答复。但是我认为Html.Raw()是“按原样显示,不编码”。因此,如果使用此格式,则在将其保存到数据库之前无法解码html。因此,它将显示用户输入的内容,而无需任何“安全性”检查。因此,我认为这不是最佳解决方案。
贾尼2011年

9

这很简单:

HttpUtility.HtmlDecode(Model.Content)

另一个解决方案,您还可以返回HTMLString,Razor将输出正确的格式:

在视图本身中:

@Html.GetSomeHtml()

在控制器中:

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

8

您也可以简单地使用HtmlString

    @(new HtmlString(Model.Content))

0

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

恕我直言,您不应将经过html编码的数据存储在数据库中。只需存储为纯文本格式(未编码),然后像这样显示您的数据,您的html就会被自动编码:

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

0

我只是\用Razor和Java Script显示了一个反斜杠。

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

我找到了解决方案:

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

不要忘记@using Newtonsoft.Jsonchtml页面顶部添加。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.