domingo, 1 de maio de 2011

Capítulo 3: Handling Events and Managing State Lição 1: Understanding the ASP.NET Life Cycle and Handling Events

A primeira lição do capítulo 3 explica sobre o ciclo de vida da página e dos controles.

De início a lição começa explicando sobre os eventos mais comuns que são manipulados no arquivo Global.asax:
  • Application_Start: É executado quando a aplicação é iniciado no servidor, muito comum quando é feito o acesso do primeiro usuário.
  • Application_End: Quando a aplicação é finalizada. Pode ocorrer quando você para a aplicação pelo IIS ou quando é feito o servidor é reiniciado ou desligado.
  • Application_Error: Como o nome já explica é executado quando ocorre um erro na aplicação.
  • Application_LogRequest: É executado quando é feita uma requisição a aplicação, é usado para gravar informações especificas da requisição.
  • Application_PostLogRequest: É executado quando é concluida uma requisição feita ao sistema.
Como uma sessão que é criado por usuário é possível criar uma sessão que é utilizada por toda aplicação. Basta substituir o Session por Application, é como uma sessão, mas ao invés de ser enxergada por um único usuário é enxergada por todos os usuários da aplicação.

Em seguida na lição inicia a explicação do ciclo de vida da página, com certeza a maior dificuldade para programadores de aplicações windows que migram para o ambiente web, pois não estão acostumados com essa situação.

Os eventos mais comuns e em ordem de execução de uma página são os seguintes:
  • PreInit: É o primeiro evento que o desenvolvedor pode manipular de uma página, é muito utilizado para definir valores de Master Page ou Temas em tempo de execução. Caso não utilize Master Page é neste evento que você pode criar controles dinamicamente.
  • Init: Este evento é executado depois que todos controles foram instanciados, aqui você pode alterar os valores de iniciação dos controles. Caso utilize Master Page é neste evento que deve adicionar os controles dinamicamente.
  • InitComplete: Executado quando todas as inicializações estiverem completas.
  • PreLoad: Executado antes da viewstate ser carregada e antes de ocorrer o processo de Postback. Necessário quando você precisa que os controles estejam iniciados e antes da viewstate ser restabelecida.
  • Load: A página está estável e iniciada. O Evento Load da página é chamada primeiramente, em seguida todos os eventos Load dos controles são executados hierarquicamente.
  • LoadComplete: Neste evento todos os controles são carregados.
  • PreRender: Este evento ainda permite que alterações finais aos controles. Ocorre depois dos eventos de postback ter ocorridos, e ainda a viewstate não foi salva, ainda permitindo alterações.
  • SaveStateComplete: Neste evento a viewstate esta pronta. Qualquer alteração feita neste momento ou depois serão ignoradas. Este evento é util quando você precisa justamente que a viewstate esteja pronta.
  • Render: O Render é um método e não um evento, o asp.net chama este método para cada controle. Este método gera os códigos html e todos os outros necessários para exibição da página ao cliente.
  • Unload: Este evento é utilizado para liberação de recursos, até pode ser executado manualmente mas é um processo pouco comum.
Após explicar os principais eventos do ciclo de vida da página. A lição explica como criar um controle em tempo de execução. Código simples, única resalva é utilizar o evento Page_PreInit (quando não usar Master Page) ou Page_Init (quando usar Master Page):

protected void Page_PreInit(object sender, EventArgs e)
{

    // Create instances of the controls
    Label FeedbackLabel = new Label();
    TextBox InputTextBox = new TextBox();
    Button SubmitButton = new Button();
    // Assign the control properties
    FeedbackLabel.ID = "FeedbackLabel";
    FeedbackLabel.Text = "Please type your name: ";
    SubmitButton.ID = "SubmitButton";
    SubmitButton.Text = "Submit";
    InputTextBox.ID = "InputTextBox";
    // Create event handlers
    SubmitButton.Click += new System.EventHandler(SubmitButton_Click);
    // Add the controls to a Panel
    Panel1.Controls.Add(FeedbackLabel);
    Panel1.Controls.Add(InputTextBox);
    Panel1.Controls.Add(SubmitButton);
}


protected void SubmitButton_Click(object sender, EventArgs e)
{
    // Create an instance of Button for the existing control
    Button SubmitButton = (Button)sender;
    // Update the text on the Button
    SubmitButton.Text = "Submit again!";
    // Create the Label and TextBox controls
    Label FeedbackLabel = (Label)FindControl("FeedbackLabel");
    TextBox InputTextBox = (TextBox)FindControl("InputTextBox");
    // Update the controls
    FeedbackLabel.Text = string.Format("Hi, {0}", InputTextBox.Text);
}


A lição explica como criar os eventos da página, no caso do vb você deve utilizar os dois ComboBox que estão na parte superior no arquivo de código. E no caso do c#, basta escrever o código, pois a propriedade AutoEventWireup por padrão é true, não necessitando mais nenhuma associação.

Outro processo comum utilizado pelos desenvolvedores e explicados é o PostBack automático. Alguns controles como o botão executam o postback automaticamente quando seu evento é acionado. Mas no caso do evento TextChanged do TextBox por exemplo ele não executa o PostBack automaticamente, é necessário alterar a propriedade AutoPostBack para true, caso não faça isso, o evento TextChanged só será executado quando outro controle executar o PostBack no formulário como por exemplo um clique do botão.

Neste caso como ocorre: O usuário alterou o texto do textBox, nada acontece pois a propriedade esta como false, em seguida o usuário clica no botão. O primeiro evento a ser executado é o TextChanged que estava aguardando um postback ocorrer, em seguida é executado o evento clique do botão.

Se quiser que o TextChanged seja executado assim que o texto seja alterado altere a propriedade AutoPostBack para true.

Assim finaliza esta lição.

Abraços...

Nenhum comentário:

Postar um comentário