如何从html编码内容中阻止HtmlGenericControl?

时间:2011-08-19 21:36:51

标签: c# asp.net dotnetnuke html-encode htmlgenericcontrol

我正在使用C#编写一个asp.net站点(实际上是一个DotNetNuke模块)。从代码隐藏,我正在尝试创建一个<script>标记,我在其中设置了一个必需的js变量,然后将其附加到HMTL <head>。 js var是图像文件的相对URL的(文字)数组。由于数组包含字符串,因此每个项必须用引号括起来。

问题是,<script></script>之间的字符串在某处自动被HtmlEncoded,因此每个数组项的引号都被&quot;替换。这似乎发生在呈现HtmlGenericControl时。 DotNetNuke可能是罪魁祸首吗?有人可以建议一个解决方法吗?

我当前的代码(在我的控件中从Page_Load处理程序运行):

HtmlGenericControl PreviewDataScriptTag = new HtmlGenericControl("script");
PreviewDataScriptTag.Attributes.Add("type", "text/javascript");
StringBuilder PreviewDataScriptCode = new StringBuilder();
PreviewDataScriptCode.Append("var preview_imgs = [");
string pathPrefix = @"""";
string pathSuffix = @""",";
foreach (string path in this.DocPreviewImages)
{
    PreviewDataScriptCode.Append(pathPrefix + PreviewUrlBase + Path.GetFileName(path) + pathSuffix);
}
// Remove last comma from js code
PreviewDataScriptCode.Remove(PreviewDataScriptCode.Length-1, 1);
PreviewDataScriptCode.Append("];");
PreviewDataScriptTag.InnerText = PreviewDataScriptCode.ToString();
Page.Header.Controls.Add(PreviewDataScriptTag);

1 个答案:

答案 0 :(得分:15)

使用节点的InnerHtml属性,而不是InnerText属性。

  

InnerHtml属性不会自动对HTML实体中的特殊字符进行编码。 HTML实体允许您显示特殊字符,例如&lt;字符,浏览器通常会将其解释为具有特殊含义。 &lt;字符将被解释为标记的开头,并且不会显示在页面上。显示&lt;你需要使用实体&lt;。