【问题标题】:ASP.NET Div with runat=server and InnerHtml html tag encoded anywayASP.NET Div 与 runat=server 和 InnerHtml html 标记无论如何编码
【发布时间】:2012-09-13 09:00:52
【问题描述】:

我对 HtmlGenericControl 对象的 InnerHTML 属性有疑问。我认为如果我将“xx”分配给 InnerText 属性,它将被编码 - 确实如此 - 如果我将相同的字符串分配给 InnerHtml 它不会被编码 - 但确实如此!我很困惑,因为它违背了我在其他帖子中看到的内容。

背景: 我分配的字符串是从数据库加载的,并在其生命周期内分配给各种其他字符串,然后最后用 Replace 方法替换占位符。它仍然包含“xx”而不是编码版本......为了绝对确定我绕过了整个过程并直接在后面的代码中分配了“xx”字符串 - 结果仍然保持不变(即编码)。

有人能解释一下为什么会这样吗?我做错了什么?谢谢。

编辑以使问题 100% 明确: 我需要以编程方式将“xx”分配给 HTMLGenericControl 对象,并将其呈现为 HTML 标记而不是编码文本。发生的情况是我可以看到“xx”写在屏幕上 - 不需要,我想看到粗体文本。我认为(并且在文档中对此进行了描述),如果我分配给 InnerHtml 属性,则字符串不会被编码并“按原样”显示。但它的行为并非如此。

【问题讨论】:

  • 我不太确定我是否理解这个问题。问题是你替换占位符的字符串没有编码,但是你的占位符已经编码了吗?

标签: c# asp.net htmlgenericcontrol


【解决方案1】:

如果在您的情况下用 ASP:Literal 控件替换 HTMLGenericControl 是可行的,我会这样做。

我在升级 CMS 系统时遇到了类似的情况,我就是这样处理的。

【讨论】:

  • 我完全按照你的建议做了,而且效果很好。谢谢。您知道为什么在使用属性 InnerHTML 时它会编码 HTML 标记吗?它在文档中写到它不编码 html 标签。我很困惑:)
  • 抱歉,我不太确定为什么。似乎我在编写服务器控件时只需要使用这个技巧。也许其他人会发布原因。很高兴你成功了!
【解决方案2】:
var sb = new StringBuilder();
editable.RenderControl(new HtmlTextWriter(new StringWriter(sb)));
stringDiv = sb.ToString();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多