2009-10-30 16 views
9

La parte del ciclo di vita web è described come questo:Perché la modifica dell'ordine OnLoad/CreateChildControls cambia al postback?

On Page Load

  1. Constructor
  2. OnInit
  3. OnLoad
  4. metodo
  5. ConnectionConsumer viene chiamato se parte web è collegabile
  6. CreateChildControls ...

Il 1 ° postback (PostBack clicca gestore imposta ViewState via pubblica proprietà)

  1. Constructor
  2. OnInit
  3. CreateChildControls
  4. movimentazione OnLoad
  5. PostBack click ...

il postback secondo (PostBack clicca gestore imposta ViewState via pubblica proprietà)

  1. Constructor
  2. OnInit
  3. LoadViewState
  4. CreateChildControls
  5. OnLoad ...

Come voi c un vedere OnLoad e CreateChildControls cambiano il loro ordine. Ciò introduce alcune difficoltà nel mio codice in quanto ho bisogno di raccogliere vari dati che ho usato nell'elemento OnLoad.

C'è qualche motivo per cui l'ordine è cambiato nella fase di postback?

risposta

14

CreateChildControls viene chiamato ogniqualvolta il framework (o se stessi) chiama il metodo ConfirmChildControls. Questo metodo dovrebbe essere chiamato ogni volta che è necessario che i controlli figlio siano presenti.

Nel caso del framework, si desidera impostare i valori registrati tra OnInit e OnLoad (in modo da poter accedere ai valori durante OnLoad). Perché ha bisogno dei controlli per farlo, chiamerà per voi Garantire Controlli.

Se non è presente il postback, non è inoltre necessario impostare i valori e quindi la chiamata a ConfirmChildControls attenderà fino a quando il framework non avrà bisogno dei controlli. Questo accade tra OnLoad e OnPreRender.

+0

Questa è una buona risposta. – spa

-4

Questo non dovrebbe accadere, ne sei assolutamente sicuro? Non ci sono altri thread in esecuzione che potrebbero far sembrare che l'ordine sia cambiato?

Questo è dopotutto solo ASP.NET, un programma eseguito da un computer (nel senso che dovrebbe sempre fare le cose allo stesso modo, a differenza di una persona).

+0

Sì, sono sicuro che ... :-( – spa

+0

Questo non è nulla che mi sia venuto da solo.È descritto in vari post del blog (vedi il link nella domanda). L'ho verificato con il debugger – spa