【问题标题】:Display ASP Tag String As HTML in ASP.NET在 ASP.NET 中将 ASP 标记字符串显示为 HTML
【发布时间】:2015-03-06 10:10:48
【问题描述】:

我正在尝试将 asp 下拉列表标记显示为字符串作为 html 中的 asp 标记:

<%= HttpUtility.HtmlDecode("<asp:DropDownList ID=\"day\" runat=\"server\"></asp:DropDownList>") %>

如果我尝试将 html 标签显示为字符串,例如 img 标签,它会完美显示它, 但是使用<asp:DropDownList...> 它不会显示任何内容。

请帮助我已经尝试解决了 2 天。

【问题讨论】:

    标签: html asp.net tags


    【解决方案1】:

    asp.net 应用程序试图阻止跨站点脚本攻击,所以当我们将值直接放入 UI 时,我的意思是内部 html 包含类似 的字符串将被视为跨脚本所以它不允许这样做。

    例子:

    string mystring="<asp:Button id="b1" Text="Submit" runat="server" />"
    

    如果我们试图将此代码直接放入 UI 字段,那么它将不允许我们这样做

    注意:我们可以在 asp.net 中关闭跨脚本功能,但这不是一个好主意

    你可以使用纯 html 控件安装 asp 控件,然后它就可以工作了。

    string mystring="<input type="button" id="b1" Text="Submit" runat="server" />"
    

    注意:如果您允许用户在您的程序中输入敏感信息,请始终考虑您需要防止的跨站点脚本攻击。

    HttpUtility.HtmlDecode 编码你的字符串

    html编码是为了防止跨站脚本攻击所以才会起作用

    注意:编码输出 如果输出包含来自用户或其他来源(如数据库)的输入,则使用HttpUtility.HtmlEncode 方法对输出进行编码。 HtmlEncode 替换代表这些字符的 HTML-to-HTML 变量中具有特殊含义的字符。例如,

    参考:msdn

    【讨论】:

    • 这正是我正在做的,我使用 HttpUtility.HtmlDecode 所以它不应该跨脚本,但它似乎正在这样做。
    • @korkotyan 如果您允许用户输入一些内容然后对跨侧脚本感到好奇。他可以输入脚本而不是原始输入,并且该脚本可能会获取您的敏感数据。所以总是对跨站脚本感到好奇
    • 感谢您的回复。不幸的是,我仍然不明白如何更改代码,这样它就可以在没有交叉脚本的情况下工作。
    • 一种方法你可以使用 htmldecode 来做到这一点..如果你想要更多的安全检查你的用户输入并确保它不包含任何有害信息..你可以限制一些脚本打开标签,如 在您的 ui 字段中。您还可以加密来自用户的数据。
    • 我觉得这里有误会,我不是想从用户那里得到输入,只是想在html脚本中插入asp标签,就像我在上面写的那样。
    【解决方案2】:

    使用HtmlTextWriter 类和RenderControl 方法。

    经验:

    var finalHtmlTag = new StringBuilder(); 
    var tempWriter= new StringWriter(finalHtmlTag ); 
    var tempHtml= new HtmlTextWriter(tempWriter); 
    YourConrol.RenderControl(tempHtml); 
    var html = finalHtmlTag.ToString(); 
    

    【讨论】:

    • 感谢您的回答,很抱歉我忘了提到我是在 c# 中这样做的。但是如何在html文件中实现呢。
    猜你喜欢
    • 2013-11-27
    • 1970-01-01
    • 2021-11-04
    • 2016-11-17
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多