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.