Quando adicionamos uma nova página que utiliza code behind deparamo-nos com um método Page_Load que nos permite adicionar código que será processado durante o evento Load da página. Para além do evento Load, esta técnica também pode ser aplicada a outros eventos gerados pela página. Hoje enquanto consultava o forum do site www.asp.net deparei-me com uma pergunta sobre este assunto. Mas afinal como é que o método é relacionado com o evento Load da página? Em primeiro lugar convém salientar que temos controlo sobre o estabelecimento deste tipo de relacionamentos. O atributo AutoEventWireup da directiva @Page permite-nos infuenciar o estabelecimento deste tipo de relacionamentos: a atribuição do valor false faz com que relacionamentos deste tipo não sejam estabelecidos.
O atributo AutoEventWireup da directiva anterior faz com que o parser injecte código na página de forma a efectuar o override da propriedade SuportAutoEvents originalmente definida pela classe TemplateControl (por defeito, esta propriedade retorna o valor true). Esta propriedade é utilizada durante o inicio do ciclo de vida da página (mais precisamente durante o método HookUpAutomaticHandlers que é invocado no inicio do método ProcessRequest responsável pelo tratamento do pedido da página). Na verdade este método delega o estabelecimento dos relacionamentos entre os métodos com nomes especiais e os eventos da página no método HookUpAutomaticHandlersWithNoAssert ou no método HookUpAutomaticHandlersWithAssert (este último é apenas um proxy para o primeiro de forma a implementar validações a nível de de segurança).
O método HookUpAutomaticHandlersWithNoAssert limita-se a estabelecer os relacionamentos entre os métodos e os eventos (o Reflector descreve o código com muito melhor precisão do que eu
). Para terminar, convém salientar que ambos estes métodos são implementados pela classe TemplateControl pelo que a utilização de métodos com nomes especiais é possível em todos os controlos derivados desta classe.
posted on Wednesday, June 22, 2005 10:53 PM