Foros del Web » Programando para Internet » ASPX (.net) »

Simular evento Load después de control_click

Estas en el tema de Simular evento Load después de control_click en el foro de ASPX (.net) en Foros del Web. Bueno, es algo complejo. Todo parte de este otro tema . La cuestión es que heredo todas mis páginas de una plantilla para que se ...
  #1 (permalink)  
Antiguo 01/12/2005, 11:46
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Simular evento Load después de control_click

Bueno, es algo complejo. Todo parte de este otro tema.

La cuestión es que heredo todas mis páginas de una plantilla para que se agreguen siempre unas etiquetas script y link sin tener que ponerlas una a una en todas las páginas.

Plantilla.aspx.vb
Código:
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim ruta() As String = Request.Path.Split("/")
        Dim rutaScript As String = ""
        Dim rutaCSS As String = ""
        For i As Integer = 2 To ruta.Length - 2
            rutaScript += "../"
            rutaCSS += "../"
        Next
        rutaScript += "scripts.js"
        rutaCSS += "Estilos/estilos" & Session("tipoEstilo") & ".css"

        RegisterClientScriptBlock("script", "<script language='javascript' src='" & rutaScript & "'></script>")
        RegisterClientScriptBlock("css", "<LINK title='Estilos' href='" & rutaCSS & "' type='text/css' rel='stylesheet'>")

    End Sub
Si os fijáis la hoja de estilo está definida por una variable de sesión de modo que la pueda modificar durante la visita del cliente, incluso cargarla al principio de la sesión si el cliente almacenó el tipo en una cookie. Pues bien, utilizo unos LinkButton para cambiar la variable de la sesión y así cambiar la hoja.

Código:
    Private Sub lbtnCSSNormal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lbtnCSSNormal.Click
        Session("tipoEstilo") = "Normal"
    End Sub

    Private Sub lbtnCSSGrande_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lbtnCSSGrande.Click
        Session("tipoEstilo") = "Grande"
    End Sub
Pero claro, el evento Load de la página se ejecuta antes que click, por lo que me carga la hoja de estilo de antes. Si le vuelvo a dar al botón, como la variable de sesión ya cambió, pues sí que aparece la nueva hoja de estilo.

En fin, me gustaría que repondiera antes al click, o bien, en lugar de en el evento load de la plantilla, pues en otro evento.

Un poco lioso quizás.

Gracias y un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #2 (permalink)  
Antiguo 01/12/2005, 17:04
 
Fecha de Ingreso: enero-2004
Mensajes: 310
Antigüedad: 20 años, 3 meses
Puntos: 0
Hazlo en el Init de la pagina
__________________
Un saludo,
Trucos
Videos
  #3 (permalink)  
Antiguo 01/12/2005, 19:11
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 4 meses
Puntos: 7
Yo lo haría con código de cliente y cookies (busca style switcher), en casos en los que no funcione recién usaría lo que tratas de hacer... (no a través del método POST, sino a través de GET)

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #4 (permalink)  
Antiguo 02/12/2005, 04:18
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
OK, gracias a los dos. Miraré esas opciones.

Un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #5 (permalink)  
Antiguo 02/12/2005, 06:49
 
Fecha de Ingreso: noviembre-2005
Mensajes: 17
Antigüedad: 18 años, 5 meses
Puntos: 0
Hola!

Prueba a poner
Cita:
rutaCSS += "Estilos/estilos" & Session("tipoEstilo") & ".css"
en el evento click del boton. De esta manera, cuando vaya a construir la página la variable rutaCSS tendrá el valor correcto y no será necesario hacer otro click.

Un saludo!
  #6 (permalink)  
Antiguo 05/12/2005, 04:46
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Ummm.... vamos a ver josuth. La clase Plantilla es la que incluye los
bloques para hacer referencia tanto a la hoja de estilos como a los
scripts en el evento Load.

Esta clase es la que heredan el resto de páginas de la aplicación, por lo
que todas las páginas ejecutarán el mismo código en su evento Load. El
evento Click de un botón de cualquier página se ejecuta siempre después de
Load, por lo que aunque cambie el la variable rutaCSS, que por otro lado
es privada en el evento Load, ésta ya había sido utilizada para escribir
el bloque de script con el valor anterior.

Otra cosa que se puede hacer es poner RegisterClientScriptBlock() en un
botón de un control de usuario ASCX, y éste ponerlo en todas las páginas.
Por ejemplo, en una cabecera común, donde se seleccionan las diferentes
hojas de estilo.

Un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #7 (permalink)  
Antiguo 05/12/2005, 07:56
 
Fecha de Ingreso: noviembre-2005
Mensajes: 17
Antigüedad: 18 años, 5 meses
Puntos: 0
Cita:
Iniciado por Bravenap
Ummm.... vamos a ver josuth. La clase Plantilla es la que incluye los
bloques para hacer referencia tanto a la hoja de estilos como a los
scripts en el evento Load.
Vale, no leí bien el código de tu primer post.

Se me ocurren dos soluciones. La primera es llamar a RegisterClientScriptBlock en el evento donde cambias la hoja de estilos (pero no sé si se puede registrar dos veces el mismo bloque, sobreescribiendo el anterior, nunca he utilizado ese método).

La segunda, quizas no es muy elegante, pero debería funcionar. Se trata de poner en el evento click un Server.Transfer() a la misma página. Es como si se refrescara la página, de manera que fuerzas a ejecutarse otra vez el evento Load, poniendo la ruta a la hoja de estilos correcta.

Un saludo!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:58.