ASP.NET–Área Administrativa

ASP.NET – Área Administrativa

Criado por Henrique Graça em 26 de Janeiro de 2011 | 1 comentário

Estamos de volta com mais um tutorial sobre ASP.NET. Hoje iremos começar a criar a área de administração do nosso site. Vamos poder criar empresas, localidades, apagar comentários, ver votações, etc.. Fiquem atentos e participem neste brainstorming de programação.

No último tutorial criamos o nosso modelo de dados e definimos os níveis de acesso da aplicação. Com a definição desses níveis é agora possível adicionar funcionalidades que apenas estão disponíveis para os administradores do nosso site.

1.Administração

Vamos começar por adicionar uma nova páginas por cada tabela na nossa entidade dentro da pasta admin, para assim essas páginas ficarem apenas visíveis a utilizadores com perfil Admin. Estas novas páginas têm de referenciar a master page “Site.Master”.

No final iremos ficar com estas páginas.

De seguida vamos editar a página Empresas.aspx . Adicionamos um titulo, um parágrafo e um Panel, este último irá conter a GridView. O Panel servirá para possibilitar o scroll quando a grid se expande no modo de edição.

Vamos adicionar uma gridView e coloca-la dentro do panel:

De seguida entramos no mode de design e adicionamos uma EntityDataSource à GridView com o nome ”EntityDataSourceEmpresas”, configuramos a ligação e escolhemos como entidade a Tabela Empresas. Marcar todas as checkboxes.

De seguida seleccionamos todo o texto “Criar empresa” e carregamos no icone “Convert to Hyperlink” e escolhemos a página de destino “Create_Empresa.aspx”, ou então no código adicionamos uma tag “<a>” com href para a página.

Vamos abrir a página Create_Empresa.aspx. Nesta página vamos adicionar um titulo, um link que permite voltar à lista de empresas e uma form que vai permitir adicionar os novos valores para uma empresa. Para esta form é adicionada uma nova EntityDataSource, tal e qual como foi configurada anteriormente. Vamos colocar a opção por defeito da form como insert.

De seguida vamos editar o template de insert da nossa form e vamos adicionar uma dropDownList que irá conter as localidades existentes na base de dados. Criamos uma nova entityDatasource que irá apontar para a tabela localidades.  Definimos o Display com a propriedade “Nome” e o value com a propriedade “Id”.

Depois editamos os databindings da dropDownlist e colocamos como binding do SelectedValue a propriedade que faz Bind com a tabela Empresas, neste caso a LocalidadeId. Adicionamos um campo oculto que vai conter a Data de criação do registo.

Para inserirmos a data de criação de registo podemos fazê-lo na base de dados com um campo default ou um trigger. Neste caso vamos fazê-lo no evento ItemInserting do form, onde colocamos o valor da data actual no campo DataCriacao.

Para podermos ver estas alterações em funcionamento, vamos criar os novos items no nosso menu de navegação. Vamos abrir a master page, “Site.Master”

Como podemos ver estas novas páginas foram colocadas num sub-menu do menu Admin. Vamos correr a nossa aplicação e testar as novas funcionalidades. Depois de fazer o login, podemos verificar os novos itens no menu.

Escolhemos a opção Empresas e vemos a nossa lista de empresas ( estão no projecto os inserts necessáros para criar as empresas e localidades). Neste ecrã podemos editar, criar e apagar empresas. Ao escolhermos a opção criar empresa, somos redireccionados para a página de criação. Onde podemos preencher os campos necessários e conseguimos ver uma lista de Localidades.

2. Conclusão

Por hoje damos o tutorial por terminado. No próximo tutorial vamos terminar as nossas páginas e começar a tratar do layout. Em baixo podem fazer download do projecto (Visual Studio 2010). Caso tenham alguma questão já sabem, deixem um comentário em baixo.

Download: GoodToWork [ 331Kb ]

ASP.NET–Início do Projecto GoodToWork

ASP.NET – Inicio do Projecto “GoodToWork”

Criado por Henrique Graça em 21 de Dezembro de 2010 | 16 comentários

Estamos de volta com mais um tutorial sobre ASP.NET. Hoje iremos começar a construir a nossa aplicação. Fiquem atentos e participem neste brainstorming de programação.

1. Inicio

O Site que iremos construir irá permitir aos utilizadores avaliar empresas em que trabalham ou trabalharam, em termos de condições, ambiente, salário, etc. Com estes dados iremos ter um repositório que poderá ajudar outros utilizadores a escolher o seu próximo emprego.

Para tal vamos precisar de um modelo de dados, que iremos construir neste turorial (o modelo pode sofrer alterações).

Este modelo será criado com a ajuda do editor gráfico da Entity Framework.

Para iniciar a nossa aplicação vamos executar o Visual Studio e criar um novo projecto como mostra a figura.

Este projecto inclui muitas das funcionalidades do ASP.NET, MasterPages, Menus, Membership. Vem também com estilos CSS e com scripts de javascript (Jquery).

Podemos ver o resultado imediatamente, executando o projecto (F5 ou ctrl + F5)

2. Arquitectura de 3 camadas

O desenho de aplicações estruturados em camadas é extremamente popular e recomendado. Esta arquitectura permite incrementar a performance da aplicação, a sua escalabilidade, flexibilidade, re-utilização de código e ter uma panóplia de outros beneficios.

Existem  vários desenho mas, nós iremos utilzar a arquitectura de 3 camadas, o que significa que a nossa aplicação será dividida em 3 grandes áreas de funcionalidade

  • Data Layer, permite gerir a base de dados e aceder a dados nela contidos
  • Business Layer, permite gerir as regras e lógica de negócio
  • Presentation Layer, é a camada de visualização (User Interface)

Em baixo podemos ver uma imagem de uma arquitectura de 3 camadas em ASP.NET

3. Data Access Layer (DAL)

Como vimos anteriormente, nesta camada fica a Base de Dados e o acesso à mesma.

Para conseguirmos esse objectivo, vamos criar um novo projecto do tipo “Class Library”, na nossa aplicação. Como mostra a figura em baixo.

De seguida vamos apagar o ficheiro “Class1″ criado neste novo projecto e vamos adicionar uma Entity Data Model.

Criamos um projecto vazio

4. Criar a Base de dados

Depois de adicionada a Entidade temos de criar as tabelas e as respectivas associações.

Para isso carregamos no botao direito do rato em cima do Entity Data Model Designer.

Depois de criada a tabela, temos de criar as colunas (propriedades). Como mostra em baixo. Ou carregando na tecla “Enter”, quando se tem uma tabela seleccionada

Não esquecer de definir as propriedades de cada coluna no ecrã de propriedades.

4.1 Associações e Cardinalidade

Ao criar modelos geralmente temos diversas entidades cada uma com diversos atributos que podem ser relacionados entre si.

Um relacionamento pode ser entendido como uma associação entre instâncias de Entidades devido a regras de negócio. Normalmente ocorre entre instâncias de duas ou mais Entidades, podendo ocorrer entre instâncias da mesma Entidade (auto-relacionamento).

Para definir o número de ocorrências de uma entidade usamos o conceito de Cardinalidade.

A Cardinalidade indica quantas ocorrências de uma Entidade participam no mínimo e no máxima do relacionamento.

Cardinalidade UM para UM, UM para N e N para N.

Na imagem em baixo, criamos uma associação entre Empresas e Localidades de UM para N.

Uma Empresa pertence a uma Localidade, uma Localidade possui nenhuma ou muitas Empresas.

O resultado ficará visivel no editor

4.2 Modelo Final (está sujeito a alteração)

Em baixo está o resultado do nosso modelo até à data.

5. Conclusão

Por hoje damos o tutorial por terminado. Para a semana vamos falar do Membership, como criar e gerir utilizadores. Em baixo podem fazer download do projecto (Visual Studio 2010). Caso tenham alguma questão já sabem, deixem um comentário em baixo.

Download: GoodToWork [ 225Kb ]

ASP.NET–State Management

ASP.NET – State Management

Criado por Henrique Graça em 14 de Dezembro de 2010 | 9 comentários

Estamos de volta com mais um tutorial sobre ASP.NET. Hoje iremos falar sobre State Management numa aplicação ASP.NET. Fiquem atentos e participem neste brainstorming de programação.

1. State Management

Nenhuma framework Web, por muito avançada que seja, pode alterar o facto de o protocolo HTTP ser stateless (não guarda o estado entre Requests). Depois de cada Request, o cliente desliga-se do servidor e o ASP.NET descarta os objectos que foram criados para a página. Esta arquitectura garante que as aplicações Web podem servir milhares de Requests simultaneos, sem que o servidor fique sem memória. A desvantagem é que precisamos de outras tecnicas para garantir que a informação das páginas se mantém entre Requests e possa ser utilizada quando necessário.
O ASP.NET, inclui uma grande variedade de opções no que toca a State Management. A opção correcta depende do tipo de dados que queremos guardar, onde queremos guardar, se está disponivel para um ou mais utilizadores, o nivel de segurança e performance que queremos obter.
Em baixo podem ver um quadro com as várias opções e qual o seu contexto de utilização.

Como podem ver existem muitas opções, felizmente, o ASP.NET fornece um modo de trabalhar semelhante para todas elas. Se estas formas de State Management não forem suficientes, podemos criar o nosso próprio mecanismo de State Management. Em baixo, veremos mais em pormenor estas ferramentas.

2. ViewState

Deve ser a nossa primeira escolha para guardar informação no contexto de uma única página. O View State é utilizado internamente pelo ASP.NET para guardar o estado dos controlos da página entre PostBacks.

O ViewState permite guardar todos os tipos de Objectos de .NET e as nossas próprias classes, desde que estajam marcadas com o atributo [Serializable].

O ViewState pode ser desactivado por controlo, por página ou por Site.

Para guardar dados no View State utilizamos a propriedade:

ViewState["NomeIdenfificativo"] = "Valor";

Para aceder ao View State:

string ValorViewState = ViewState["NomeIdenfificativo"].ToString();

Lembrar que o ViewState retorna um objecto, logo temos de fazer um “cast” para o tipo de objecto que queremos.

3. QueryString

Uma das desvantagens do ViewState, é o facto de só existir no contexto de uma página. Aqui entram as QueryStrings, permitem enviar informação entre páginas.

Este mecanismo é muito utilizado, por exemplo em motores de busca.

http://www.google.pt/search?q=pplware

A QueryString é o pedaço de texto a seguir ao “?”. Neste caso define uma única variável “q”, que contém o valor “pplware”.

A vantagem da QueryString é ser leve e não trazer nenhum fardo para o servidor. A desvantagem é os valores estarem visiveis para o utilizador e podem ser alterados.

Utilizar a QueryString:

string valor = "teste";   Response.Redirect("pagina.aspx?variavel=" + valor);

Receber valores de QueryString:

string valor = Request.QueryString["variavel"];
4. Cookies

São pequenos ficheiros que são criados no disco do cliente(ou na memória do Browser se forem temporários). As vantagens dos Cookies, podem ser utilizados por qualquer página do site e podem ser mantidos entre visitas. Estão limitados em termos de tamanho e de tipo de objectos que se pode guardar (string). Tem de se ter muita atenção, especialmente agora que estão cada vez mais a ser utilizados smartphones para aceder à internet, pois estes não permitem cookies.

Para utilizar os Cookies, usamos o Request para aceder e o Response para guardar.

HttpCookie cookie = new HttpCookie("Preferencias");   cookie["Lingua"] ="PT";   cookie["Pais"] ="PT";   Response.Cookies.Add(cookie);

Um cookie adicionado desta maneira, persiste até o browser ser encerrado. Para persistir tem de se definir a propriedade:

cookie.Expires = DateTime.Days.Add(1);

Para aceder a um cookie:

HttpCookie cookie = Reques.Cookie["Preferencias"];   string Pais = cookie["Pais"];

Para remover um cookie definimos a propriedade “Expires” com uma data que já passou.

5. Session

É o peso pesado do State Management. Permite que as informações persistam em todas as páginas do site. Cada utilizador que entra no site tem um SessionId diferente o que permite guardar informações por utilizador. A Session tem um peso grande para a memória do servidor.

Para guardar o SessionId entre Requests é utilizado um cookie chamado “ASP.NET_SESSIONID”. Se o browser não suportar cookies, é utilizado QueryString.

Este cookie só é criado quando guardamos algo na sessão, até lá, é sempre gerado um novo SessionId a cada Request.

Utilizar Session:

Session["Variavel"] ="valor";   string valor = Session["Variavel"].ToString();

É sempre necessário fazer “cast” para o tipo de objecto.

A sessão é global para toda a aplicação por utilizador. A sessão perde-se quando o utilizador fechar o browser, a aplicação fizer Restart ou terminar a sessão utilizando o método Session.Abandon();

Podemos configurar o comportamento da Sessão no Web.config. No atributo “SessionState”, podemos definir o timeout, o modo de guardar a sessão (memória do servidor, sql server, state server), se utiliza cookies, etc.

6. Application

Semelhante à Session mas, permite que os valores guardados sejam acedidos por qualquer utilizador da nossa aplicação. Esses valores perdem-se quando a aplicação fizer um Restart à pool.

Uma utilização corrente é contabilizar quantos utilizadores estão a utilizar a aplicação nesse momento, utilizando o global.asax.

Para utilizar a Application:

Application["Variavel"] = "valor";   string valor = Application["Variavel"].ToString();
7. Resumo

O State Management é a arte de reter informação entre Requests. Geralmente a informação é “user-specific” como por exemplo, items do carrinho de compras, username, nivel de acesso), mas por vezes pode ser global, como estatisticas que fazemos track no decorrer da aplicação. Como o ASP.NET utiliza uma arquitectura desconectada, é sempre preciso implicitamente indicar que queremos guardar/receber a informação a cada Request.

A ferramente que escolhemos para guardar estado pode ter um grande impacto na escalabilidade, performance e segurança da nossa aplicação.

Por hoje damos o tutorial por terminado. Para a semana vamos começar a desenhar a nossa aplicação. Caso tenham alguma questão já sabem, deixem um comentário em baixo.

ASP.NET–Anatomia de uma aplicação

ASP.NET – Anatomia de uma aplicação

Criado por Henrique Graça em 7 de Dezembro de 2010 | 9 comentários

Estamos de volta com mais um tutorial sobre ASP.NET. Hoje iremos falar sobre os componentes que fazem parte de uma aplicação ASP.NET. Fiquem atentos e participem neste brainstorming de programação.

1. Anatomia

Uma das funcionalidades mais notáveis do modelo de execução do ASP.NET, é o facto de ser possível  fazer update à aplicação, sem que seja preciso fazer restart ao Servidor e nem preocupar com um possível prejuízo aos utilizadores da aplicação. Isto significa que podemos adicionar, alterar e remover ficheiros na directoria virtual a qualquer momento, sem qualquer impacto.

Depois de fazer uma alteração, o processo de migração para uma nova “Application Domain” é executado. Este processo faz um restart seguro à aplicação e substitui os ficheiros da directoria temporária do ASP.NET. Até uma simples alteração ao WEB.CONFIG obriga a um restart seguro da aplicação.

Estrutura de directorias:

  • BIN – Esta directoria contém todas as DLL que a aplicação utiliza. Se criarmos um WebProject no Visual Studio, esta directoria irá também conter o código compilado da nossa aplicação.
  • APP_CODE – Nesta directoria ficam todas as classes compiladas dinamicamente. Se criarmos um WebProject no Visual Studio, esta directoria não será necessária.
  • APP_GLOBALRESOURCES – Esta directoria contém recursos globais que são utilizados por todas as páginas da aplicação.
  • APP_LOCALRESOURCES – Como a directoria GlobalResources, esta pasta guarda recursos mas, apenas para a página associada.
  • APP_WEBREFERENCES – Esta directoria guarda referências de WebServices que a aplicação utilize.
  • APP_DATA – Esta directoria está reservada para “Data Storage”, como bases de dados SQL Express ou ficheiros XML. Claro que, podemos colocá-los noutra directoria.
  • APP_BROWSERS – Esta directoria contém ficheiros XML com definições de Browsers, o que torna possível várias renderizações entre Browsers.
  • APP_THEMES – Esta directoria contém os Temas utilizados na aplicação.
2. Global.asax

O ficheiro Global.asax, permite escrever código que reage a eventos globais da aplicação. Não é possivel fazer o request directo ao Global.asax, ao invés o ficheiro Global.asax é executado automáticamente em responsta a diferentes eventos da aplicação.

O ficheiro Global.asax é opcional, só é possivel ter um por aplicação e tem de estar na root.

Lista de eventos da aplicação

  • Application_BeginRequest() – Este método é chamado a cada novo Request.
  • Application_EndRequest() – Este método é chamado no fim de cada Request
  • Application_Start() – Este método é invocado sempre que a aplicação é iniciada.
  • Session_Start() – Este método é invocado no inicio de cada nova sessão.
  • Application_Error() – Este método é invocada quando uma excepção não controlada acontece na aplicação
  • Session_End() – Este método é invocado quando uma sessão do utilizador termina. Uma sessão pode terminar, forçando a mesma ou por timeout, normalmente 20 minutos.
  • Application_End() – Este método é invocado quando uma aplicação termina.
3.  Configurações ASP.NET

As configurações de uma aplicação ASP.NET são efectuadas em ficheiros XML. As grande vantagens deste mecanismo são, os ficheiros nunca ficam bloqueados, são de fácil acesso, leitura, alteração e replicação.

As configurações começam num ficheiro chamado, machine.config. Este ficheiro encontra-se na directoria “c:\windows\microsoft.net\framework\[versão]\config”. Este é o primeiro ficheiro de configuração de ASP.NET e contém as configurações mais criticas da aplicação.

<MachineKey> – Esta elemento na configuração do ficheiro machine.config, é responsável pela encriptação das aplicações ASP.NET. Protege os cookies de sessão e pode proteger também o ViewState.

Na mesma pasta do ficheiro machine.config, existe outro ficheiro web.config, que contém mais configurações.

Apesar de existirem estes ficheiros de configuração globais (utilizados em todas as aplicações ASP.NET no servidor), normalmente as configurações são efecutadas por aplicação, com um ou mais, ficheiros Web.config.

No ficheiro de configuração podemos, guardar ligações a bases de dados e configurações particulares de cada aplicação.

Dentro do ficheiro Web.config, um dos atributos mais importantes é o <system.web>, dentro deste atributo existem muitas configurações que podemos costumizar.

  • authentication – este elemento configura a autenticação na aplicação.
  • compilation – este elemento identifica a versão da framework .NET. Também será aqui que indicamos se queremos ou não fazer debug na aplicação.
  • customErrors – este elemento permite definir URL para reencaminhar um pedido, quando um determinado erro ocorre.
  • membership – este elemento permite configurar a funcionaliade de gestão de utilizadores do ASP.NET
  • pages – este elemento define definições para as páginas
  • profile – este elemento permite configurar o mecanismo de profiles do ASP.NET
  • sessionState – este elemento permite alterar as configurações de como é guardada e gerida a Sessão.
  • trace – este elemento configura o tracing na aplicação.

Além de configurar tudo manualmente o ASP.NET fornece uma ferramenta visual para fazer alterações no Web.config. Através desta aplicação, podemos configurar utilizadores, settings, email.

Para aceder a esta aplicação carregamos no botão que podemos observar na imagem em baixo.

Depois de carregar no botão, entramos na aplicação e podemos alterar as configurações da nossa aplicação.

4. Page Class

Todas as páginas ASP.NET são derivadas do objecto Page. Este é dos objectos mais importante e com mais funcionalidades do ASP.NET.

Request: Este objecto representa os valores e propriedades do Request Http que causou o carregamento da nossa página. Contém todos os parâmetros de URL e todas as informações enviadas pelo cliente.

  • Cookies – contém uma colecção de Cookies enviados com o Request.
  • Headers e ServerVariables – providenciam uma colecção de HTTP Headers e variáveis de servidor. São informações Low-Level do Request.
  • IsAuthenticated – Verifica se o utilizador está autenticado.
  • IsLocal – Verifica se o Request foi feito do Servidor.
  • QueryString – Disponibiliza os parâmetros que foram passados no URL.

Response: Este objecto representa a resposta do Servidor a um Request do cliente.

  • Cookies – contém uma colecção de Cookies enviados com o Response. Podemos usar este objecto para criar Cookies.
  • Redirect() – este método dá instruções ao Browser para pedir um novo URL.
  • Write() – este método permite escrever no output stream.

Server: Este objecto é uma classe de utilidades, disponibiliza muitos métodos e propriedades.

  • MachineName – Nome da máquina em que a aplicação está ser executada.
  • GetLastError() – Método que permite obter o último, muito utilizado no global.asax no método Application_Error().
  • HtmlEncode() e HtmlDecode() – Altera o valor para HTML e vice-versa.
  • MapPath() – Devolve o caminho físico que corresponde a uma pasta virtual.
  • Transfer() – Redirecciona o pedido para outra página. Semelhante ao Response.Redirect mas mais rápido, pois o pedido é logo executado no servidor.

Neste tutorial incidimos sobre os componentes que fazem parte da anatomia de uma aplicação  ASP.NET. No próximo tutorial vamos falar sobre state management (View State, Cookies, Session, Application).

Caso tenham alguma questão, coloquem nos comentários, terei todo o gosto em responder.

ASP.NET–Introdução e Conceitos

ASP.NET – Introdução e conceitos

Criado por Henrique Graça em 30 de Novembro de 2010 | 40 comentários

Estamos de volta com mais uma temporada de guia práticos sobre ASP.NET, conforme a escolha dos nossos visitantes. Hoje começo com uma overview à tecnologia ASP.NET. Fiquem atentos e participem neste brainstorming de programação.

1. O que é ASP.NET?

ASP.NET é uma tecnologia de scripting do lado do servidor, esta tecnologia permite colocar numa página web, scripts que irão ser executados por um servidor.

ASP.NET é uma tecnologia de scripting do lado do servidor, esta tecnologia permite colocar numa página web, scripts que irão ser executados por um servidor.

  • ASP, significa Active Server Pages
  • ASP.NET, corre no servidor de IIS
  • IIS (Internet Information Services), é um servidor de internet da Microsoft
  • IIS vem instalado e é gratuito nos servidores Windows ( inclui Windows 2000 e Windows XP Professional)

ASP.NET é compilado não é interpretado:

ASP.NET bem como todas as aplicações .NET, são compiladas. É impossivel correr código C# ou VB sem que esteja compilado.
Felizmente as aplicações ASP.NET não precisam de ser compiladas todas as vezes que são executadas, em vez disso o código “IL” é criado uma vez e actualizado apenas quando o source code é alterado.
Os ficheiros ficam em cache no servidor na directoria “c:\windows\microsoft.net\framework\[versão]\temporary asp.net files”.

Esta afirmação depende do tipo de projecto que escolhemos. Se optarmos por um Web Project o código é todo compilado quando compilamos o projecto. Caso a opção seja um simples Web Site, cada página é compilada assim que for feito o “Request”.

2. Web Forms

As páginas ASP.NET ( conhecidas como Web Forms) são uma parte vital de uma aplicação ASP.NET, pois providenciam o output para o browser depois de o cliente ter feito o “Request”.

Este conceito foi criado para facilitar a migração de programadores das tecnologias de cliente (Windows Forms) para a Web, usando as mesmas facilidades do interface windows, como arrastar botões.

Uma página ASP.NET é:

  • Ígual a uma página HTML
  • Pode conter HTML, XML e scripts
  • Os scripts são executados no Servidor
  • Tem a extensão “aspx”
  • Todos os controlos têm de estar contidos dentro de um “<form>”
  • A “<form>” tem de conter uma tag “runat=server”
  • O atributo “runat=server”, este atributo significa que a form deve ser processada no lado do servidor. Também indica que os controlos incluidos nesta form estão assecíveis do lado do script.
3.  Como funciona?

Recordar que:

  • As aplicações são executadas no servidor: Imagine que tem uma página em que possibilita que os clientes gravem comentários. O utilizador faz estas operações no browser, mas para gravar o comentário precisamos de fazer um update na base de dados, para isso o nosso código tem de correr no servidor. O ASP.NET trata destes eventos com uma técnica chamada PostBack, que envia a página (Form) quando certas acções são executadas. Quando o ASP.NET recebe a página, pode executar os eventos correspondentes do lado do servidor.
  • As aplicações Web são “stateless” (não guardam estado): Por outras palavras, assim que uma página é renderizada em HTML, os objectos são destruidos e todas as informações do cliente são descartadas. Este modelo é muito bom para aumentar a escalabilidade e o tráfego das aplicações, mas causa alguns problemas para oferecer uma experiência semelhante a uma aplicação Windows. Para colmatar esta lacuna o ASP.NET oferece várias ferramentas, a mais notável é o mecanismo chamado View State, que automáticamente coloca informação na página num “hidden field”, falaremos melhor desta e outras ferramentas.

ASP.NET utiliza um modelo de eventos, neste modelo, adicionamos controlos à página e escolhemos que eventos queremos responder. Cada “event handler” é um método discreto que mantêm o código limpo e arrumado.

Como funcionam os eventos?

  1. A nossa página corre pela primeira vez. ASP.NET cria a página e controlos associados, o código de inicialização é executado, a página é renderizada em HTML e retornada para o cliente. Os objectos são também libertados da memória do servidor.
  2. Numa determinada altura o utilizador executa uma acção que origina um PostBack, como clicar num botão. Toda a informação da página é enviada para o servidor.
  3. O ASP.NET intercepta a página e cria de novo os objectos no servidor, colocando-os no estado em que estavam a ultima vez que foram enviados para o cliente.
  4. Depois o ASP.NET verifica qual foi o evento causador do PostBack e dispara o evento correspondente. Nesta altura executamos o código associado ao evento e actualizamos a informação referente aos objectos.
  5. A página modificada é renderizada em HTML e devolvida ao cliente com os novos dados. Os objectos são retirados da memória do servidor.
4. Page Lifecycle

Existem dois tipos de eventos que originam um PostBack:

  1. Immediate Response Events : Executados sempre que carregamos num botão ou utilizamos a função Javascript “__DoPostBack()”
  2. Change Events: Sempre que seja alterado o estado de um controlo, como alterar o valor de uma checkbox ou textbox. Se a propriedade AutoPostBack estiver activa o evento é executado imediatamente, caso contrário é executado no próximo PostBack da página.

Imaginemos que temos um página com um botão de submit e uma textbox sem a propriedade AutoPostBack activa. Alteramos o texto e carregamos no botão. O que acontece?

O ASP.NET executa estes eventos, por ordem:

  1. Page.Init
  2. Page.Load
  3. TextBox.TexChanged
  4. Button.Click
  5. Page.PreRender
  6. Page.Unload

Existem mais eventos, mas para já apenas precisamos de saber estes.

Exercicio: Testar os eventos.

Vamos criar um novo projecto, uma aplicação ASP.NET vazia.

Adicionamos uma nova WebForm:

Adicionamos um botão e uma label. A label tem a propriedade “EnableViewState = False”, para não incrementar o valor sempre que é feito um novo PostBack. Por defeito esta propriedade está activa, é uma das formas mencionadas para guardar o estado dos controlos entre cada PostBack.

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   <html xmlns="http://www.w3.org/1999/xhtml">   <head runat="server">   <title></title>   </head>   <body>   <form id="form1" runat="server">   
     
     
   </form>   </body>   </html>

Carregamos na nova página com o botão direito do rato e escolhemos “View Code”

Adicionamos os eventos que queremos “tratar”. Os eventos da página têm o prefixo “page”, desta forma o ASP.NET sabe que são metodos especificos que tem de executar. Esta associação é feita pelo atributo “AutoEventWireup=true” na página. Para adicionar um evento ao botão podemos ir ao design da página e clicar duas vezes no botão.

using System;   using System.Collections.Generic;   using System.Linq;   using System.Web;   using System.Web.UI;   using System.Web.UI.WebControls;   namespace WebApplication1   {   public partial class WebForm1 : System.Web.UI.Page   {   protected void Page_Load(object sender, EventArgs e)   {   Label1.Text += "Evento Page_Load <br/>";   if (Page.IsPostBack) // Metodo utilizado para saber se é a primeira vez que a página é processada   {                    // ou se é um PostBack   Label1.Text += "Não é a primeira vez que executamos a página <br/>";   }   }   protected void Page_Init(object sender, EventArgs e)   {   Label1.Text += "Evento Page_Init <br/>";   }   protected void Page_PreRender(object sender, EventArgs e)   {   Label1.Text += "Evento Page_PreRender <br/>";   }    protected void Page_Unload(object sender, EventArgs e)   {   //Este texto nunca aparece pois o HTML nesta altura já foi renderizado   Label1.Text += "Evento Page_Unload <br/>";   }   protected void Button1_Click(object sender, EventArgs e)   {   Label1.Text += "Evento do botão <br/>";   }   }   }

De seguida executamos o projecto ( F5 ou ctrl + F5). Este será o resultado.

Primeira execução:

Como podemos observar os eventos são executados pela ordem que já referimos.

Segunda execução:

Depois de clicar no botão, é executado o PostBack. Como podemos ver a propriedade Page.IsPostBack é verdadeira, logo sabemos que não é a primeira execução da página. Depois do evento Page_Load são executados os eventos do controlo que originou o PostBack.

Por hoje terminámos. Neste tutorial incidimos sobre alguns dos conceitos de ASP.NET. No próximo tutorial vamos falar sobre os objectos Request, Response e sobre state management (View State, Cookies, Session, Application).

Caso tenham alguma questão, coloquem nos comentários, terei todo o gosto em responder.