Ho creato un semplice script per capire quale è l'ordine degli eventi al caricamento di un controllo. Questo è il codice:
Il risultato al caricamento del controllo è:codice:Imports System Imports System.Web.UI Imports System.Web.UI.WebControls namespace MyControls Public Class MyLogIn Inherits Control Implements INamingContainer dim i as integer = 1 dim cnz as boolean = true Protected Overrides Sub OnLoad( e As EventArgs ) context.response.write("LoadPage (" & i &") ") i += 1 end sub Sub CheckPassword (s as object, e as eventargs) cnz = false context.response.write("LoadCheckPassword(" & i &") ") i += 1 End Sub Sub OutPassword (s as object, e as eventargs) cnz = true context.response.write("LoadOutPassword(" & i &") ") i += 1 End Sub Protected Overrides Sub OnPreRender( e As EventArgs ) context.response.write("LoadPreRender(" & i &") ") i += 1 CreateChildControls() end sub Protected Overrides Sub CreateChildControls() context.response.write("LoadChildControl(" & i &") ") i += 1 Me.controls.clear Dim LogInButton As New Button LogInButton.id="LogIn_Button" if cnz = true then LogInButton.text="LogIn" AddHandler LogInButton.Click, AddressOf CheckPassword else LogInButton.text="LogOut" AddHandler LogInButton.Click, AddressOf OutPassword end if Me.Controls.Add( LogInButton ) End Sub End Class end namespace
LoadPage (1)
LoadChildControl(2)
LoadPreRender(3)
LoadChildControl(4)
Il childcontrol viene caricato due volte perchè lo richiamo dalla sub OnPreRender. In questa maniera posso fare in modo che venga visualizzato un pulsante piuttosto che un altro a seconda della variabile che passo alla pressione del tasto.
Premendo il tasto di login il risultato diventa:
LoadChildControl(1)
LoadPage (2)
LoadCheckPassword(3)
LoadPreRender(4)
LoadChildControl(5)
ed il pulsante diventa correttamente quello di LogOut. Ora premendo il pulsante di LogOut mi aspetterei di ottenere:
LoadChildControl(1)
LoadPage (2)
LoadOutPassword(3)
LoadPreRender(4)
LoadChildControl(5)
ed invece non accade assolutamente nulla. E' come se la sub OutPassword associata all'envento OnClick del pulsante non venisse richiamata.
Come mai?
Ciao![]()

Rispondi quotando
