【问题标题】:ASP.NET MVC 4 HtmlHelper - mix decoded HTML with encoded HTMLASP.NET MVC 4 HtmlHelper - 将解码的 HTML 与编码的 HTML 混合
【发布时间】:2013-04-02 13:35:36
【问题描述】:

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

使用时

@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 字符串,还是应该使用不同的方法?

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    它在我的页面上以纯文本形式显示“alert("hello");”。 问题解决了。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-24
      • 2011-01-05
      • 1970-01-01
      • 2011-04-09
      • 1970-01-01
      • 2018-03-27
      相关资源
      最近更新 更多