2011-08-19 9 views
6

Piszę stronę asp.net (w rzeczywistości, moduł DotNetNuke), używając C#. Z kodu źródłowego próbuję utworzyć znacznik <script>, w którym ustawiam wymaganą zmienną js, a następnie dołączam ją do HMTL <head>. Js var to (dosłowna) tablica względnych adresów URL dla plików graficznych. Ponieważ tablica zawiera ciągi, każdy element musi być ujęty w cudzysłów.Jak zapobiec HtmlGenericControl przed treściami html?

Problem polega na tym, że ciąg znaków między <script> a </script> jest automatycznie gdzieś HtmlEncoded, więc cytaty wokół każdego elementu tablicy są zastępowane przez &quot;. Wydaje się, że ma to miejsce podczas renderowania HtmlGenericControl. Czy DotNetNuke może być winowajcą? Czy ktoś mógłby zaproponować obejście?

Mój obecny kod (działa od Page_Load obsługi w moim kontroli):

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

Zalecam stosowanie nazw zmiennych pisanych małymi literami. To jest mylące, aby przeczytać. – Amy

+0

Dzięki za cynk. Nie jestem do końca przyzwyczajony do .net i zacząłem używać wielkich liter do wszystkiego, po tym, jak się zorientowali. Programiści mają tendencję do wielkich * nazw właściwości obiektów *. Przypuszczam, że jest to przypadek nadmiernej korekty! – bfavaretto

Odpowiedz

14

Spójrz pomocą właściwości węzła, a nie własności innerText InnerHtml.

Własność InnerHtml nie powoduje automatycznego kodowania znaków specjalnych do i z elementów HTML. Obiekty HTML umożliwiają wyświetlanie znaków specjalnych, takich jak znak <, który przeglądarka zwykle interpretuje jako mający specjalne znaczenie. Znak < zostanie zinterpretowany jako początek tagu i nie będzie wyświetlany na stronie. Aby wyświetlić znak <, należy użyć encji <.

+0

Dzięki, to się udało. Próbowałem tego przed opublikowaniem pytania i jakoś wtedy nie zadziałało. Musiałem zapomnieć o innej zmiennej! Głupi ja! – bfavaretto

+0

+1: To działało również dla mnie! –

Powiązane problemy