2011-08-19 3 views
6

私はC#を使ってasp.netサイト(実際にはDotNetNukeモジュール)を書いています。コードビハインドから、私は<script>タグを作成しようとしています。ここで、必要なjs変数を設定し、それをHMTL <head>に追加します。 js varはイメージファイルの相対URLの(リテラル)配列です。配列には文字列が含まれているため、各項目は引用符で囲む必要があります。各配列項目の前後に引用符を&quot;で置換されているので、問題があるHtmlGenericControlのhtmlエンコードコンテンツからの保護方法を教えてください。

<script></script>の間の文字列が自動的に、どこかHtmlEncodedされています。これはHtmlGenericControlがレンダリングされたときに発生するようです。 DotNetNukeが原因だろうか?誰かが回避策を提案できますか? (私のコントロールにPage_Loadハンドラから実行されている)

私の現在のコード:ノードではなく、InnerTextプロパティプロパティのInnerHtmlプロパティを使用しての

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に慣れていないし、大文字の大文字を大文字にする傾向があることを実感した後、大文字を使い始めた。私はそれが過補正のケースだと思います! – bfavaretto

答えて

14

ルック。

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

+0

ありがとう、それはトリックでした。私は質問を投稿する前にそれを試したが、何とかそれはうまくいかなかった。私は他の変数を忘れてしまったに違いない!愚かな私! – bfavaretto

+0

+1:これも私のために働いた! –

関連する問題