2011-08-19 83 views
6

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

问题是,<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

我建议您的变量使用小写的名称。这是令人困惑的阅读。 – Amy

+0

感谢您的提示。我并不习惯.net,并在实现后开始使用大写的.net开发人员倾向于使用大写*对象属性名称*。我想这是一个过度纠正的情况! – bfavaretto

回答

14

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

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

+0

谢谢,那就是诀窍。我在发布这个问题之前尝试过,并且不知何故它没有工作。我一定失去了一些其他变量的踪迹!愚蠢的我! – bfavaretto

+0

+1:这也适用于我! –