7

我正在使用 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);
4

1 回答 1

16

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

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

于 2011-08-20T01:53:36.963 回答