Как предотвратить HtmlGenericControl от содержимого html-кодировки? - PullRequest
7 голосов
/ 20 августа 2011

Я пишу сайт asp.net (на самом деле, модуль DotNetNuke), используя C #. Исходя из кода, я пытаюсь создать тег <script>, в котором я устанавливаю обязательную переменную js, а затем добавляю ее в HMTL <head>. Js var - это (буквальный) массив относительных URL для файлов изображений. Поскольку массив содержит строки, каждый элемент должен быть заключен в кавычки.

Проблема в том, что строка между <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 Ответ

15 голосов
/ 20 августа 2011

Посмотрите на использование свойства InnerHtml узла, а не свойства InnerText.

Свойство InnerHtml не позволяет автоматически кодировать специальные символы в и из сущностей HTML. Сущности HTML позволяют отображать специальные символы, такие как символ <, которые браузер обычно интерпретирует как имеющие особое значение. Символ <будет интерпретироваться как начало тега и не будет отображаться на странице. Чтобы отобразить символ <, вам необходимо использовать объект <. </p>

...