ASP.NET WebForms中Html.Raw的替代方案

15

我在Web表单应用程序中遇到了“潜在危险请求”的错误。我尝试过使用“validatepage=false”和“<%= %>”,然后尝试了Server.HtmlEncode,所以它将编码的HTML保存在数据库中。现在当我在Repeater控件中展示数据时,使用Server.HtmlDecode(DataContent.FieldValue("Contents", Container)),它显示带有HTML标记的文本,例如<p>asfd</p>

我该如何解决这个问题?在Razor视图中,Html.Raw运作良好,但是在Web表单视图/ASP.NET中有什么替代方法吗?有人能帮忙吗?


3
我尝试了很多次,但我最终自己解决了它 :) <%# HttpUtility.HtmlDecode(Server.HtmlDecode(DataContent.FieldValue("ContentBody", Container)))%> - Imran Rashid
这对我来说有效,在<asp:Literal Mode="PassThrough" runat="server" ID="litError" runat="server" />中。 - Eric D. Johnson
@ImranRashid 您的解决方案有效,但为什么要使用两次HtmlDecode? - Murat Can OĞUZHAN
2个回答

10

您可以使用 <%= value %>,它将不会对值进行编码。

或者您可以实现自己的 HTML.Raw 版本。

Html.Raw 返回一个 IHtmlString 实例,它几乎与字符串相同,但 ASP.net 不会对 IHtmlString 进行编码。

复制 HTML.Raw() 的简单函数。

    /// <summary>
    /// Stops asp.net from encoding the source HTML string.
    /// </summary>
    /// <param name="source"></param>
    /// <returns></returns>
    public static IHtmlString HTMLRaw(string source)
    {
        return new HtmlString(source);
    }

8
您可以使用带有 Mode=PassThrough 的 asp:Literal。

<asp:Literal Mode="PassThrough" runat="server" Text='<%# Server.HtmlDecode(DataContent.FieldValue("ContentBody", Container))%>'></asp:Literal>你能否返回相同的结果? - Imran Rashid
asp:listeral带passthrough是最终让我成功的。 - Amal
透传胜利! <asp:Literal Mode="PassThrough" runat="server" ID="litError" runat="server" />this.litError.Text = "示例链接 <a href=\"https://www.google.com" target=\"_blank\">Google搜索</a>"; - Eric D. Johnson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接