2011-08-19 20 views
6

Estoy escribiendo un sitio asp.net (en realidad, un módulo DotNetNuke), usando C#. Desde el código subyacente, intento crear una etiqueta <script> donde establezco una variable js requerida, y luego la adjunto al HMTL <head>. Js var es una matriz (literal) de urls relativas para archivos de imagen. Como la matriz contiene cadenas, cada elemento debe estar entre comillas.¿Cómo evitar HtmlGenericControl desde el contenido de codificación html?

El problema es que la cadena entre <script> y </script> se está HtmlEncoded automáticamente en alguna parte, por lo que las comillas alrededor de cada elemento de la matriz se reemplazan por &quot;. Eso parece tener lugar cuando se procesa HtmlGenericControl. ¿Podría ser DotNetNuke el culpable? ¿Alguien podría sugerir una solución?

Mi código actual (que va desde Page_Load manejador de mi control):

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

Recomiendo el uso de nombres de mayúsculas para sus variables. Esto es confuso de leer. – Amy

+0

Gracias por la sugerencia. Realmente no estoy acostumbrado a .net, y comencé a usar mayúsculas para todo después de darme cuenta. Los desarrolladores de .net tienden a mayúsculas * nombres de propiedades de objetos *. ¡Supongo que es un caso de corrección excesiva! – bfavaretto

Respuesta

14

buscar en el uso de la propiedad InnerHtml del nodo, no la propiedad InnerText.

La propiedad InnerHtml no codifica automáticamente caracteres especiales ay desde entidades HTML. Las entidades HTML le permiten mostrar caracteres especiales, como el <, que un navegador normalmente interpretaría que tienen un significado especial. El carácter < se interpretaría como el inicio de una etiqueta y no se muestra en la página. Para mostrar el carácter <, necesitaría usar la entidad <.

+0

Gracias, eso funcionó. Intenté eso antes de publicar la pregunta, y de alguna manera no funcionó en ese momento. ¡Debo haber perdido la pista de alguna otra variable! ¡Estúpido yo! – bfavaretto

+0

+1: ¡Esto también funcionó para mí! –

Cuestiones relacionadas