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 "
. 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);
Zalecam stosowanie nazw zmiennych pisanych małymi literami. To jest mylące, aby przeczytać. – Amy
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