asp.net page flow (user controls)

cenário:
aspx que faz o render de todas as outras páginas, aliás System.Web.UI.UserControl
main.aspx
– userControl.ascx
— componenteExistente.ascx

em vez da sequência PreInit, Init, InitComplete, PreLoad, Load, LoadComplete, SaveStateComplete, PreRender, PreRenderComplete de uma aspx tradicional temos uma sequencia bem mais curta de Init, Load e PreRender.
Para além de perceber a sequência dos eventos precisava de saber também como é que os userControls interagiam entre si. Basicamente a sequencia de eventos entre userControls funciona é:

  • de baixo para cima – os userControls que estiverem definidos no topo da página são processados primeiro
  • antes do load de fora para dentro – no caso de haver “nested” controls são processados primeiro os userControls que estiverem no nivel hierarquico mais baixo
  • a partir do load de dentro para fora
  • em sequência de eventos – os eventos de um mesmo tipo são todos processados em sequencia, ou seja primeiro processam-se todos os Inits, depois todos os Loads e assim sucessivamente.
  • o processamento dos eventos dos controlos de uma página, por exemplo Button.Click são feitos depois do Load


Alguns pormenores a ter em conta:

  • todos os objectos (System.Web.UI.Control) que forem criados dinamicamente têm que ser recriados a cada postback, preferencialmente no evento Init
  • as propriedades de um objecto são populadas automaticamente na passagem do Init para o Load do userControl respectivo. um pormenor a ter em atenção é que isto aplica-se quer a objectos já existentes na página quer aos criados dinamicamente desde que mantenham o mesmo nome.
  • o viewstate só fica disponivel no load

curiosamente, e ao contrário do que eu pensava, nada disto tem a ver com o viewstate o que se pode comprovar fazendo um trace há execução da página e verificando o estado dobjecto viewstate. Para mais informação ver o artigo: ViewState: All You Wanted to Know

Outro pormenor interessante é a utilização de variáveis estáticas (static / shared) que basicamente persistem o seu valor entre postbacks e estão logo disponiveis no primeiro evento – Init.

Junte-se à conversa

1 comentário

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *