2011-08-19 82 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:這也適用於我! –