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

InnerText プロパティではなく、ノードのInnerHtmlプロパティの使用を検討してください。

InnerHtml プロパティは、HTML エンティティとの間で特殊文字を自動的にエンコードしません。HTML エンティティを使用すると、ブラウザが通常は特別な意味を持つと解釈する < 文字などの特殊文字を表示できます。< 文字はタグの開始として解釈され、ページには表示されません。< 文字を表示するには、エンティティ < を使用する必要があります。

于 2011-08-20T01:53:36.963 に答える