2009-12-30 33 views
17

Estoy trabajando dentro de un control de usuario web (.ascx) que se va a incluir en un formulario web normal (.aspx), pero necesito poder insertarlo de forma dinámica código en el encabezado del documento desde el Control de usuario. En mis días de Coldfusion <cfhtmlhead> haría el truco. ¿Hay un equivalente de esto en ASP.NET o un truco similar?ASP.NET inserta código de forma dinámica en la cabecera

+0

Las respuestas a continuación parecen basarse en que el encabezado tiene un atributo runat = "server", de lo contrario Page.Header es nulo. – user420667

Respuesta

29

Para añadir marcado HTML, puede hacer lo siguiente:

En el código de su control de usuario puede acceder a Page.Header, que es en sí misma un control. Para que el control a continuación, puede añadir nuevos controles:

HtmlGenericControl newControl = new HtmlGenericControl("someTag"); 
newControl.Attributes["someAttr"] = "some value"; 
Page.Header.Controls.Add(newControl); 

Para añadir marcado guión que no es necesario el acceso a la etiqueta de la cabeza en absoluto desde ASP.NET tiene los métodos de ayuda en la ClientScriptManager que haga el trabajo por usted:

Éstos son ejemplos de algunos de código también se puede poner en el código de control de usuario:

// Register some inline script: 
Page.ClientScript.RegisterClientScriptBlock(GetType(), "myAlertScript", "alert('hello!')", true); 

// Register a script reference: 
Page.ClientScript.RegisterClientScriptInclude(GetType(), "myLibraryScript", "~/Scripts/MyScriptLibrary.js"); 
+2

Estoy tratando de agregar algo de Javascript al encabezado del documento. – Kyle

+0

Gracias, el segundo método parece funcionar mejor para mí. – Kyle

9
this.Page.Header.Controls.Add 

Al hacer esto, está agregando controles a la sección de la cabeza. Puede agregar cualquier tipo de control. Si cree que necesita agregar texto simple (o si desea escribir las etiquetas manualmente), consulte la clase LiteralControl.

2

Hay un poco de orientación sobre el uso de código C# para modificar el encabezado de la página here. Debería funcionar perfectamente desde cualquier código del lado del servidor que se ejecute antes de que se complete la carga de la página.

A simple p.

HtmlHead head = Page.Header; 
HtmlTitle title = new HtmlTitle(); 
title.Text = "Test Page"; 
head.Controls.Add(title); 

referencia HTMLHead está en espacio de nombres

System.Web.UI.HtmlControls 

reemplazar el método para agregar los controles o referencias que necesita en el encabezado de la página, mientras que la página .aspx padres se carga en servidor Load del control personalizado() lado.

0

Tengo una solución simple para esto. Cree un caché de memoria en tiempo de ejecución basado en la url de la página (como una clave) que contenga x información sobre y (ya sea una referencia de archivo, texto de guión o clase que genere JavaScript) y serialice sus datos a JSON. Newtonsoft es útil para instancias de cualquier clase. De hecho, puede usar su salida para inicializar cualquier instancia nueva de una clase basada en la entrada dada. En cierto modo, eso significa que puede hacer que las instancias de cualquier clase en particular se creen automáticamente a pesar de que el usuario controle la instancia. Al final, crea un formulario web simple para servir como referencia de script y como punto final. Extrae el JavaScript (o lo que sea) y escupe el código del lado del cliente que necesita como referencia de script dentro de la etiqueta de cabecera.

10

Me doy cuenta de que esta es una vieja pregunta, pero este es otro ejemplo.

intenta esto:

Page.Header.Controls.Add(
    new LiteralControl(
     "<script>alert('Literal Added to <Head>.');</script>" 
    ) 
); 

Si desea agregar la secuencia de comandos en un determinado índice de la <head> puede utilizar

AddAt(index, new LiteralControl(...)), donde el índice 0 es igual a la parte superior de la <head>

también , debe agregar runat="server" en su etiqueta de cabecera, por ejemplo <head id="head1" runat="server">

Cuestiones relacionadas