ASP.NET MVC 4 HtmlHelper - 将已解码的HTML与编码的HTML混合使用

时间:2013-04-02 13:35:37

标签: asp.net-mvc razor asp.net-mvc-4 html-helper decode

我正在编写一个帮助方法,可以在页面上生成评论的HTML,我希望能够显示带有“< script> alert(”hello“);< / script>”的评论因为它的内容。

使用时

@HttpUtility.HtmlDecode(comment.Content)

在* .cshtml文件中,该脚本将呈现为纯文本。

但是在视图中使用此HTML帮助程序时:

@Html.PendingComment(comment)

脚本呈现为HTML并执行:

public static IHtmlString PendingComment(this HtmlHelper helper, VoidCommentPending comment)
    {
        var sb = new StringBuilder();
        sb.Append("<p>" + HttpUtility.HtmlDecode(comment.Content) + "</p>");
        return MvcHtmlString.Create(sb.ToString());
    }

尝试使用“new HtmlString()”,结果相同,当我将IHtmlString的返回结果更改为字符串时,甚至段落标记都呈现为纯文本。

是否可以在HtmlHelper中混合编码和解码HTML字符串,还是应该使用不同的方法?

1 个答案:

答案 0 :(得分:4)

好的,所以在将注释存储到数据库之前,我使用HttpUtility.Encode:

model.Content= HttpUtility.HtmlEncode(model.Content);

然后我刚从我的帮助方法中删除了解码

sb.Append("<p>" + comment.Content + "</p>");

并显示“&lt; script&gt; alert(”hello“);&lt; / script&gt;”在我的页面上作为纯文本。 问题解决了。

实际上我是“双重解码”。用HttpUtility.HtmlDecode这个内容:

&lt;script&gt;alert(&quot;hello&quot;);&lt;/script&gt;

被解码为“纯文本”html,我想要但是然后MvcHtmlString.Create正在解码它再次它得到了呈现为HTML。