2011-08-19 3 views
6

Sto scrivendo un sito asp.net (in realtà, un modulo DotNetNuke), usando C#. Da code-behind, sto cercando di creare un tag <script> dove imposto una variabile js richiesta, quindi lo aggiungo all'HMTL <head>. Js var è una matrice (letterale) di url relativi per i file di immagine. Poiché la matrice contiene stringhe, ogni elemento deve essere racchiuso tra virgolette.Come impedire HtmlGenericControl dal contenuto di codifica html?

Il problema è, la stringa tra <script> e </script> sia automaticamente HtmlEncoded qualche parte, quindi le citazioni intorno ogni elemento dell'array vengono sostituiti con &quot;. Ciò sembra avvenire quando viene eseguito il rendering dello HtmlGenericControl. Potrebbe essere DotNetNuke il colpevole? Qualcuno potrebbe suggerire una soluzione alternativa?

mio codice attuale (che parte da Page_Load gestore in mio controllo):

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

Si consiglia di utilizzare nomi di case inferiori per le variabili. Questo è fonte di confusione da leggere. – Amy

+0

Grazie per il suggerimento. Non sono molto abituato a .net e ho iniziato a usare maiuscole per tutto dopo aver realizzato gli sviluppatori .net tendono a nomi di oggetti * maiuscoli *. Immagino sia un caso di correzione eccessiva! – bfavaretto

risposta

14

Guardate utilizzando la proprietà InnerHtml del nodo, non la proprietà InnerText.

La proprietà InnerHtml non codifica automaticamente caratteri speciali da e verso entità HTML. Le entità HTML consentono di visualizzare caratteri speciali, come il carattere <, che un browser normalmente interpreterà come aventi un significato speciale. Il carattere < verrà interpretato come l'inizio di un tag e non verrà visualizzato nella pagina. Per visualizzare il carattere <, è necessario utilizzare l'entità <.

+0

Grazie, ha funzionato. L'ho provato prima di pubblicare la domanda e in qualche modo non ha funzionato. Devo aver perso traccia di qualche altra variabile! Che stupido! – bfavaretto

+0

+1: questo ha funzionato anche per me! –