Você está na página 1de 41

Verso: 2.

www.marcelosincic.com.br

Pgina 1 de 41

Ol, Criei estas apostilas a mais de 5 anos e atualizei uma srie delas com alguns dados adicionais. Muitas partes desta apostila est desatualizada, mas servir para quem quer tirar uma dvida ou aprender sobre .Net e as outras tecnologias.
Perfil Microsoft: https://www.mcpvirtualbusinesscard.com/VBCServer/msincic/profile Marcelo Sincic trabalha com informtica desde 1988. Durante anos trabalhou com desenvolvimento (iniciando com Dbase III e Clipper S'87) e com redes (Novell 2.0 e Lantastic). Hoje atua como consultor e instrutor para diversos parceiros e clientes Microsoft. Recebeu em abril de 2009 o prmio Latin American MCT Awards no MCT Summit 2009, um prmio entregue a apenas 5 instrutores de toda a Amrica Latina (http://www.marcelosincic.eti.br/Blog/post/Microsoft-MCT-Awards-AmericaLatina.aspx). Recebeu em setembro de 2009 o prmio IT HERO da equipe Microsoft Technet Brasil em reconhecimento a projeto desenvolvido (http://www.marcelosincic.eti.br/Blog/post/IT-Hero-Microsoft-TechNet.aspx). Em Novembro de 2009 recebeu novamente um premio do programa IT Hero agora na categoria de especialistas (http://www.marcelosincic.eti.br/Blog/post/TechNet-IT-Hero-Especialista-Selecionado-o-nosso-projeto-de-OCS2007.aspx). Acumula por 5 vezes certificaes com o ttulo Charter Member, indicando estar entre os primeiros do mundo a se certificarem profissionalmente em Windows 2008 e Windows 7.
Possui diversas certificaes oficiais de TI: MCITP - Microsoft Certified IT Professional Database Administrator SQL Server 2008 MCITP - Microsoft Certified IT Professional Database Administrator SQL Server 2005 MCITP - Microsoft Certified IT Professional Windows Server 2008 Admin MCITP - Microsoft Certified IT Professional Enterprise Administrator Windows 7 Charter Member MCITP - Microsoft Certified IT Professional Enterprise Support Technical MCPD - Microsoft Certified Professional Developer: Web Applications MCTS - Microsoft Certified Technology Specialist: Windows 7 Charter Member MCTS - Microsoft Certified Technology Specialist: Windows Mobile 6. Charter Member MCTS - Microsoft Certified Technology Specialist: Windows 2008 Active Directory Charter Member MCTS - Microsoft Certified Technology Specialist: Windows 2008 Networking Charter Member MCTS - Microsoft Certified Technology Specialist: System Center Configuration Manager MCTS - Microsoft Certified Technology Specialist: System Center Operations Manager MCTS - Microsoft Certified Technology Specialist: Exchange 2007 MCTS - Microsoft Certified Technology Specialist: Windows Sharepoint Services 3.0 MCTS - Microsoft Certified Technology Specialist: SQL Server 2008 MCTS - Microsoft Certified Technology Specialist: .NET Framework 3.5, ASP.NET Applications MCTS - Microsoft Certified Technology Specialist: SQL Server 2005 MCTS - Microsoft Certified Technology Specialist: Windows Vista MCTS - Microsoft Certified Technology Specialist: .NET Famework 2.0 MCDBA Microsoft Certified Database Administrator (SQL Server 2000/OLAP/BI) MCAD Microsoft Certified Application Developer .NET MCSA 2000 Microsoft Certified System Administrator Windows 2000 MCSA 2003 Microsoft Certified System Administrator Windows 2003 Microsoft Small and Medium Business Specialist MCP Visual Basic e ASP MCT Microsoft Certified Trainer SUN Java Trainer Java Core Trainer Approved IBM Certified System Administrator Lotus Domino 6.0/6.5

www.marcelosincic.com.br

Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 2 de 41

1 2

Arquitetura do ASP.NET.................................................................................4 Formulrios .....................................................................................................6 2.1 Propriedades do Projeto .........................................................................6 2.2 Criao e Configurao de Pginas.......................................................7 2.2.1 ViewState e Postback ............................................................................8 2.2.2 Utilizando Cdigos na Pgina ................................................................8 2.2.3 Navegando entre pginas ......................................................................9 2.2.4 Request e Response............................................................................ 10 2.3 Utilizando Controles .............................................................................. 11 2.3.1 Inserindo Cdigos em Controles .......................................................... 11 2.3.2 Codificao Interna .............................................................................. 13

Validadores ................................................................................................... 14 3.1 3.2 3.3 3.4 3.5 3.6 Validador de Campo Obrigatrio.......................................................... 14 Validador de Comparao .................................................................... 15 Validador de Faixa ................................................................................. 15 Validador de Expresso Regular .......................................................... 15 Validador Customizado ......................................................................... 16 Sumrio de Validadores ........................................................................ 17 Variveis de Aplicao .......................................................................... 18 Variveis de Sesso .............................................................................. 18 Cookies ................................................................................................... 19 Master Page ........................................................................................... 19 Themes ................................................................................................... 21 Skins ....................................................................................................... 23

Gerenciando Estado ..................................................................................... 18 4.1 4.2 4.3 4.4 4.5 4.6

5 6

AJAX.Net ....................................................................................................... 24 Utilizando Controles com DataSet .............................................................. 27 6.1 Utilizando DropDownList e ListBox ..................................................... 28 6.2 Utilizando o DataGrid ............................................................................ 30 6.2.1 Utilizando Link no Grid ......................................................................... 31

7 8

Criando Controles Customizados ............................................................... 34 Segurana de Acesso................................................................................... 36 8.1 8.2 8.3 Autenticao Annima .......................................................................... 36 Autenticao pelo Windows ................................................................. 36 Autenticao por Formulrio ................................................................ 37
Reproduo e distribuio livre

www.marcelosincic.com.br

Verso: 2.0

www.marcelosincic.com.br

Pgina 3 de 41

8.4 9 9.1 9.2

Autenticao por Passport ................................................................... 37 Mensagens Customizadas no Trace .................................................... 40 Tipos de Sada ....................................................................................... 40

Trace e Debug ............................................................................................... 38

10 Distribuio ................................................................................................... 41

www.marcelosincic.com.br

Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 4 de 41

1 Arquitetura do ASP.NET
Uma aplicao baseada em formulrios Windows utiliza os recursos locais da mquina do cliente, necessitando que instale o .NET Framework e um poder de processamento acima de Pentium II 300 e memria de 64 MB, alem de exigir Windows 98 ou superior. Com estas caractersticas limitamos em muito a distribuio e utilizao fora do ambiente corporativo. Com os recursos presentes e adicionados nos browsers web e a aplicao de servidores inteligentes e no apenas transmissores de textos, foi possvel criar um ambiente de aplicaes rico e funcional. Podemos separar os modelos de comunicao e processamento web na famlia Microsoft em 3 fazes. A primeira fase iniciou-se com o Windows NT 4.0 e o IIS 2.0 que fazia apenas o transporte de dados, recebendo uma solicitao de pgina e retornando o texto do html sem qualquer processamento prvio antes da resposta:

Figura 1 - Pginas eram retornadas sem processamento

Na segunda fase os servidores passaram a ser inteligentes e permitiam o processamento da pgina antes de retornar ao cliente, este processo foi feito com o sistema IDC/HTX e ASP. Nesta poca os arquivos de processamento, como o ASP, uma pgina continha tags html e tambm tags de servidor, como o exemplo abaixo:
<HTML> <P>Bem Vindo</P> <P>Agora so <%Request.Write(Time())%></P> </HTML>

As linhas delimitadas pelo sinal <% eram tags chamadas de diretivas, ou seja, cdigo que antes de retornar ao cliente era processada, e o que chegava no cliente era:
<HTML> <P>Bem Vindo</P> <P>Agora so 09:41:30</P> </HTML>

Este modelo era lento pois o servidor era obrigado a ler a pgina e substituir os dados, ou seja, trabalhava em modo interpretado, ocasionando erros de desenvolvimento e a sintaxe para os programadores no era bem checada por no haver compilao. Para ganhar performance eram criados componentes compilados e chamados pelas diretivas para serem includos. Outra desvantagem do ASP era a necessidade de montar a pgina manualmente, uma vez que era necessrio colocar a diretiva exatamente no local onde queremos que aparece a hora, como no exemplo acima.
www.marcelosincic.com.br Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 5 de 41

O modelo grfico pode ser representado da seguinte forma:

Figura 2 - As pginas antes de retornarem passam por processamento

No modelo atual as pginas no precisam ser processadas, uma vez que as diretivas no precisam mais ser utilizadas e passamos a ter o conceito de Code Behind, onde a parte dos cdigos compilada e se transforma em uma dll e a pgina com as tags html ficam em um arquivo texto comum, que ser mesclado ao resultado do processamento da dll. Ganha-se performance por no mais interpretar o cdigo pgina por pgina e a construo dos cdigos idntica ao desenvolvimento comum, onde colocamos uma caixa de texto na pgina e a manipulamos utilizando os mtodos e propriedades comuns, como feito em aplicaes de formulrios Windows. Outra interessante incluso a capacidade do servidor adaptar a pgina e o retorno html ao cliente conforme a verso do browser e sistema operacional, incluindo celular wap. O modelo grfico pode ser representado da seguinte forma:

Figura 3 - Os cdigos so independentes da pagina e multiplataforma

Os processamentos de objetos, por exemplo, quando se clica em um boto chamado de postback, ou seja, os dados da pgina so enviados para o servidor, este processa monta o retorno e devolve a pgina atualizada, como veremos durante este curso.
www.marcelosincic.com.br Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 6 de 41

2 Formulrios
Assim como uma aplicao de formulrios, uma aplicao ASP.NET um projeto com estrutura de diretrios, podendo utilizar classes, namespace e todos os outros recursos do framework. Cada projeto web cria um subdiretrio no servidor web e dentro deste um diretrio de nome bin onde estar a dll de todas as pginas. Ou seja, para cada pgina criada, que tambm pode ser chamada de formulrio web, criado um arquivo com extenso aspx que contem o html da pgina e um arquivo com extenso aspx.cs ou aspx.vb dependendo da linguagem, e neste residem os cdigos. Os arquivos aspx por ser o modelo html da pgina copiado normalmente para funcionamento, enquanto os arquivos de cdigo no so copiados pois todos eles se transformam na dll do site, lembrando que cada projeto (que tambm um site) tem uma nica dll.

2.1 Propriedades do Projeto


O template para criao de uma aplicao web o ASP.NET Web Application, como na figura abaixo:

Figura 4 - Template para aplicao web

Ao utilizar este tipo de projeto automaticamente o VS 2008 ir abrir uma pgina de nome webform1.aspx que a pgina padro de todos os projetos. A figura abaixo mostra os principais componentes da aplicao web e do projeto:

www.marcelosincic.com.br

Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 7 de 41

Figura 5 - Pgina e projeto iniciais

Podemos criar novas pginas por clicar sobre o nome do projeto com o boto direito e escolher a opo Add...Web Form. Para renomear pginas clique com o boto direito sobre ela e escolha Rename. Ao renomear uma pgina note que o nome da classe no alterado, este teria que ser feito manualmente caso deseje.

2.2 Criao e Configurao de Pginas


Agora veremos o cdigo html da pgina e temos o cdigo abaixo:
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="WebApplication1.WebForm1" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <HTML> <HEAD> <title>WebForm1</title> <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1"> <meta name="CODE_LANGUAGE" Content="C#"> <meta name="vs_defaultClientScript" content="JavaScript"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> </HEAD> <body MS_POSITIONING="GridLayout"> <form id="Form2" method="post" runat="server"> <asp:TextBox id="Textbox2" style="Z-INDEX: 101; LEFT: 192px; POSITION: absolute; TOP: 72px" runat="server"></asp:TextBox> </form> </body> </HTML>

Note que a primeira linha a configurao da pgina, onde identificamos no primeiro atributo a linguagem utilizada, na segunda tag temos o arquivo onde a classe com cdigos estar. A terceira tag estar sendo discutida a frente e a quarta tag, a mais importante, indica o nome da dll que ser compilada e o nome da classe que dever estar na dll. Ou seja, neste caso teremos um arquivo WebApplication1.dll no diretrio bin do site e dentro desta dll o CRL ir procurar uma classe chamada WebForm1 que tem os cdigos da pgina acima.
www.marcelosincic.com.br Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 8 de 41

Ao alterar a tag de herana lembre-se de tambm renomear a classe, pois se na pgina estiver um nome e a classe estiver com outro nome no ser executado nenhum dos cdigos. Nas propriedades do objeto Document e form1 podemos configurar o titulo da pgina que aparece no browser, a imagem de fundo (marca dgua), som de fundo, linguagem dos scripts de cliente e de servidor, etc. Por ultimo, a aba keywords um texto livre utilizado pelos sites de busca como google, yahoo e outros para resumir a pgina, sendo opcional sua utilizao. 2.2.1 ViewState e Postback Nas propriedades do form1 temos a opes EnableViewState. Esta propriedade cria um campo oculto no formulrio com os dados preenchidos nos controles, evitando que tenhamos a necessidade de realimenta-los manualmente. Para entender melhor isto, precisamos entender o postback, uma vez que este processo essencial na arquitetura do ASP.NET. No ASP.NET existe apenas um form sempre. Para utilizar diversos botes no formulrio utilizamos sempre do tipo submit, o que permite que o servidor saiba qual boto foi clicado. O processo de postback quando o servidor recebe os dados que o cliente digitou em uma caixa de texto ou qualquer outro controle, faz o processo interno e retorna ao cliente a mesma pgina j com processo completo e devidamente alterada. Antes do ASP.NET quando uma pgina chamava outra e a pgina voltava do servidor as caixas de texto precisavam ser programaticamente preenchidas com os valores digitados. No ASP.NET isto no necessrio pois o prprio servidor se encarrega de devolver as caixas de texto e quaisquer outros controles j com os dados que estavam digitados. Podemos desligar o postback pela pgina ou pelo prprio controle, uma vez que todos os controles tem a propriedade AutoPostBack e EnableViewState. O autopostback muito utilizado em combo para que quando o usurio escolher um valor na lista, por exemplo o estado, este valor enviado ao servidor que popula a lista de Cidades e retorna ao cliente. A propriedade enableviewstate utilizada pois caso um controle no possa retornar preenchido, como senha, este valor desabilitado, impedindo que ao ser enviado ao servidor e retornar venha com o valor anterior. 2.2.2 Utilizando Cdigos na Pgina Para acessar cdigos, seja da pgina ou em controles, basta utilizar o duplo clique do mouse, assim como fazemos em formulrios windows.

www.marcelosincic.com.br

Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 9 de 41

Figura 6 - Cdigo do formulrio com um textbox e um boto

Veja a similaridade entre os eventos de uma aplicao Windows, como por exemplo, o TextChanged da caixa de texto, onde no Windows se chama apenas Changed, mas tem a mesma funcionalidade. Como exemplo de cdigo no carregamento da pgina podemos alterar o texto da caixa e o nome do boto, portanto teramos o cdigo abaixo no load: Agora temos um problema em decorrncia de termos utilizado o load, pois a cada postback este evento ocorre novamente e o nome do usurio perdido, por ser realimentado. Podemos evitar que isto acontea por testar se o load um postback ou se o primeiro carregamento desta pgina. A propriedade que permite isto IsPostback e utilizada como abaixo:
if(!IsPostBack) { TextBox1.Text = "Digite seu nome"; Button1.Text = "Clique Aqui"; } else Button1.Text = "Clique de novo..."; TextBox1.Text = "Digite seu nome"; Button1.Text = "Clique Aqui";

Com o cdigo acima, na primeira execuo a condio verdadeira, pois ainda no um postback, portanto a caixa de texto alimentada. No momento em que o boto for clicado o postback passa a ser verdadeiro e isto faz com que apenas o boto tenha seu texto alterado. 2.2.3 Navegando entre pginas Complementando o exemplo, ao digitar o nome correto no textbox queremos que seja redirecionado para o site da Curso, ento precisamos validar o que foi digitado e enviar o cliente para o site desejado.
www.marcelosincic.com.br Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 10 de 41

Isto pode ser feito no evento click do boto, onde iremos verificar o que est digitado na caixa de texto e utilizando o objeto Response chamamos o mtodo Redirect onde informamos o URL. Veja o exemplo no cdigo abaixo que foi colocado no click do boto:
private void Button1_Click(object sender, System.EventArgs e) { if(TextBox1.Text == "taquaritinga") Response.Redirect("http://www.Curso.com.br"); }

Neste exemplo enviamos o usurio a pgina da Curso, mas em momento algum informamos a Curso de onde este usurio est vindo. Para isso utilizamos o mtodo get, ou seja, enviar dados entre pgina utlizando a URL. O cdigo alterado agora informando a origem seria:
private void Button1_Click(object sender, System.EventArgs e) { if(TextBox1.Text == "taquaritinga") { string URL = "http://www.Curso.com.br"; URL += "?Origem=" + TextBox1.Text; Response.Redirect(URL); } } http://www.Curso.com.br/?Origem=taquaritinga

O resultado gerado pelo cdigo acima foi o endereo:

Desta forma enviamos uma varivel para a pgina da Curso de nome Origem com valor taquaritinga. 2.2.4 Request e Response Para lermos um valor na pgina de destino utilizamos o objeto Request, como no exemplo acima, com o cdigo: Os objetos Request e Response so, respectivamente o representante ao cliente para o servidor e o representante servidor para o cliente. Ou seja, quando queremos ler algo que o cliente enviou para o servidor utilizamos request, e quando queremos do servidor enviar dados para o cliente utilizamos o response. As mais utilizamos propriedades do Request so:
Mtodo ou Propriedade Cookies Browser HttpMethod IsAuthenticated IsSecureConnection Path ServerVariables UserAgent UserHostName UserHostAddress UserLanguages Funo Permite ler os cookies do cliente Retorna as propriedades do tipo de browser do cliente Mtodo que o cliente utilizou para enviar dados Booleano indicando se o cliente est anonimo ou identificado Booleano indicando se a conexo se deu em HTTPS Indica o site e a pgina chamada pelo cliente Retorna um array com dados como o tipo de browser, IP do cliente, etc. Retorna o sistema operacional e verso do browser utilizado Nome do cliente, recebido atravs de DNS Endereo IP do cliente Array com os idiomas que o cliente suporta Label1.Text = Request["Origem"].ToString();

Como pode ser visto na relao, o objeto request nos fornece todos os dados necessrios para conhecer melhor o cliente e a conexo. O objeto response envia os dados para o cliente ou manipula a conexo:
Mtodo ou Propriedade Cookies Cache Close End Expires
www.marcelosincic.com.br

Funo Permite gravar cookies no cliente Configura cache do servidor para reaproveitamento de pginas prvias Fecha a conexo com o cliente, que recebe um erro Termina a resposta e envia o resultado imediatamente Define o tempo de expirao da pgina, que se ultrapassado o cliente deve refazer a consulta
Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 11 de 41

Flush ServerVariables Write

Envia a resposta parcial ao cliente, til quando o resultado e muito grande Retorna um array com dados como o tipo de browser, IP do cliente, etc. Escreve cdigos html diretamente no resultado, permitindo flexibilidade na construo

Conhecer e saber utilizar os objetos request e response importante ao lidarmos com qualquer aplicao, pois com eles manipulamos chamadas e dados entre pginas.

2.3 Utilizando Controles


O VS 2008 conta com dezenas de controles que podem ser usados em um formulrio. Cada um destes controles est separado pelo seu grupo de utilizao. 2.3.1 Inserindo Cdigos em Controles Toda a manuteno e insero de cdigos simples no VS 2008 para ASP.NET, idntico ao utilizado para colocar cdigos em controles. Podemos clicar no boto da barra de propriedades e escolher o evento a ser codificado ou ento com duplo clique no objeto, podemos acessar a propriedade mais importante do objeto. -

Figura 7 - Exemplo de pgina

A pgina acima foi criada com uma caixa de texto, um objeto legenda (label) e um boto. O cdigo de load da pgina faz o label ficar invisvel e o click do boto altera o text. Veja o cdigo utilizado abaixo:
private void Page_Load(object sender, System.EventArgs e) { Label1.Visible = false; if(!IsPostBack) { TextBox1.Text = "Digite seu nome"; Button1.Text = "Clique Aqui"; } else Button1.Text = "Clique de novo..."; } private void Button1_Click(object sender, System.EventArgs e) { Label1.Visible = true;
www.marcelosincic.com.br Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 12 de 41

Label1.Text = "Ultimo valor digitado: " + TextBox1.Text; }

Agora vamos descrever um exemplo onde a primeira pgina recebe uma pequena ficha de inscrio e a segunda pgina mostra os dados. Abaixo o layout das duas pginas:

Figura 8 - Pgina de digitao com 3 labels e 3 textbox

Figura 9 - Pgina receber os dados com 3 labels

O cdigo implementado na pgina de cadastro ter cdigo apenas no boto, sendo o mtodo de envio dos dados por get, conforme o cdigo abaixo:
private void btnEnviar_Click(object sender, System.EventArgs e) { string URL = "RecebeCadastro.aspx"; URL += "?Nome=" + txtNome.Text; URL += "&Endereco=" + txtEndereco.Text; URL += "&Telefone=" + txtTelefone.Text; Response.Redirect(URL); }

Veja que concatenamos uma nica string e utilizamos para redirecionamento, sendo o endereo final aps a montagem, o seguinte cdigo:
http://localhost/WebApplication1/RecebeCadastro.aspx?Nome=aa&Endereco=bb&Telefone=cc

Na pgina que recebe o cadastro processamos os dados no load conforme o exemplo abaixo:
private void Page_Load(object sender, System.EventArgs e) { lblNome.Text = Request["Nome"].ToString();
www.marcelosincic.com.br Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 13 de 41

lblEndereco.Text = Request["Endereco"].ToString(); lblTelefone.Text = Request["Telefone"].ToString(); }

2.3.2 Codificao Interna importante notarmos como o VS 2008 monta a estrutura das pginas e como esta referencia os controles para serem utilizados no cdigo. Todos os controles na pgina html precisam conter uma referencia no code behind conforme o cdigo abaixo:
public partial class Cadastro : System.Web.UI.Page { protected System.Web.UI.WebControls.Label Label1; protected System.Web.UI.WebControls.TextBox txtNome; protected System.Web.UI.WebControls.Label Label2; protected System.Web.UI.WebControls.TextBox txtEndereco; protected System.Web.UI.WebControls.Label Label3; protected System.Web.UI.WebControls.Button btnEnviar; protected System.Web.UI.WebControls.TextBox txtTelefone;

Veja que os cdigos acima referenciam cada um dos controles utilizados com o tipo e o nome utilizados. Portanto, ao renomear um controle, note que tambm precisamos renomear o cdigo de referencia. O mesmo acontece se for utilizado um editor de pginas html e incluirmos um controle, precisamos manualmente inserir a referencia a ele no code behind. Caso no seja includa uma referencia no code behind especfica com o mesmo nome da propriedade name no html, ao clicar no boto no sero disparados os eventos. Esse cuidado muito interessante pois no ocorrem erros de compilao se o controle html estiver com nome diferente, uma vez que posso utilizar normalmente controles html nativos por motivo de scripts, assim como tambm podemos criar objetos no code behind sem que estes sejam grficos.

www.marcelosincic.com.br

Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 14 de 41

3 Validadores
O framework possui cinco controles prprios para validaes, sendo de comportamento automtico e til ao encapsularem cdigos trabalhosos, seja no cliente ou no servidor. Trataremos cada um destes controles individualmente a seguir

3.1 Validador de Campo Obrigatrio


O controle colocado no formulrio e possu as propriedades bsicas de todos os validadores. Sua funo no permitir que um formulrio seja enviado ao servidor se determinado controle no estiver preenchido. A imagem abaixo mostra a configurao deste validador:

Figura 10 - Validador de obrigatoriedade

As propriedades mais importantes so ErrorMessage para mostrar a mensagem de erro desejada, ControlToValidate para indicar o nome do controle que est sendo validado, EnableClientScript para habilitar javascript diretamente na pgina e Display permitindo deixar o controle invisvel. Basta apenas colocar os controles na pgina para que estes funcionem e se tornem visveis tanto quando mudamos de um para outro controle e quando clicarmos no boto, como a imagem a seguir:

www.marcelosincic.com.br

Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 15 de 41

Figura 11 - Validadores ativos

3.2 Validador de Comparao


A diferena entre o validador de comparao propriedades abaixo:
Mtodo ou Propriedade ControlToCompare Operator Type ValueToCompare

e o anterior a presena das

Funo til ao comparar um controle com outro, como por exemplo, confirmao de senha e email. Indica se a comparao ser de igualdade ou diferena do controle ou valor desejado Tipo de dado a ser comparado, como string, numero, data, etc. Utilizado quando a comparao for para valor fixo

3.3 Validador de Faixa


O validador de faixas tem sua funcionalidade simples, mas um dos mais teis ao validar formulrios. Sua propriedades alem das propriedades bsicas MinValue, MaxValue e Type j descrito acima, enquanto as outras duas so o valor mnimo e mximo respectivamente. Por exemplo, o telefone pode ser validado com este controle por colocar no type como integer, no minvalue o valor 10000000 e no maxvalue o valor 99999999. Como o telefone obrigatrio no pode comear com zero o valor mnimo o digito um seguido de sete zeros, e o numero mximo uma seqncia de oito dgitos de valor at nove. Assim, se o usurio digitar um telefone menor do que oito dgitos no iremos aceitar.

3.4 Validador de Expresso Regular


Este validador permite que validemos mascaras de digitao. Alem das propriedades bsicas temos a propriedade Validation Expression que tem a expresso baseada no ECMA para validao de dados. Na figura abaixo possvel ver o construtor de expresso, com uma delas exemplificadas:
www.marcelosincic.com.br Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 16 de 41

Figura 12 - Construtor de Expresso

Para entendermos o exemplo podemos olha a montagem do e-mail:


Seqncia \w+ (...) [-+.] \w+ * @ \. Validao Uma ou mais letra ou digito Seqncia composta Um dos trs caracteres pode ser utilizado, mas apenas um deles Uma ou mais letra ou digito, neste caso como est dentro de seqncia com os caracteres acima, indica que todas as vezes que um dos trs for utilizado tem que existir letras ou dgitos formando o conjunto A seqncia pode ser repetir n vezes Literal O ponto obrigatrio aps letras ou dgitos e deve existir seqncia

Por exemplo, podemos montar a estrutura de CEP como \d{5}-\d{3} onde estamos indicando cinco dgitos, um ponto e mais trs dgitos.

3.5 Validador Customizado


O validador customizado no construdo como os outros pois serve para criao manual das validaes. Estas validaes podem ser utilizadas no cdigo de cliente ou no cdigo de servidor, sendo o cdigo de servidor mais usual. Ao utilizar cdigo para validao no servidor ser criado o seguinte procedimento:
private void CustomValidator1_ServerValidate(object source, System.Web.UI.WebControls.ServerValidateEventArgs args) {

if(txtNome.Text.Length <= 5) args.IsValid = false;

O que pode ser notado de diferente neste evento a presena do isvalid indicando que o controle dever ficar visvel e os dados do formulrio no devem ser enviados. Para utilizar um script de validao no cliente podemos notar a propriedade ClientValidationFunction onde podemos colocar o nome de uma funo de cliente para validar o controle, como o cdigo abaixo:
<script language="javascript"> function ValidaNome(oSrc, args) { if(Form1.txtNome.value.length <= 5) { alert("Voce ativou o script do nome"); args.IsValid = false; } } </script>

O cdigo acima tem a funo de verificar o tamanho e validar ou no, mas desta vez utilizando diretamente o cliente, sem a necessidades dos dados terem que ser enviados ao servidor para este fazer a validao.
www.marcelosincic.com.br Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 17 de 41

3.6 Sumrio de Validadores


O controle de sumrio nos permite interagir com os outros validadores para termos uma nica caixa com todas as mensagens, por exemplo. Veja o exemplo atualizado na figura abaixo e as validaes com o sumrio:

Figura 13 - Sumrio ativado

Note que os validadores apareceram apenas no sumrio, mas para isto nas propriedades display dos validadores colocamos none. Com isto, os validadores individualmente no iro estar visveis, mas o sumrio sim. Tambm note na figura acima a propriedade ShowMessageBox e ShowSummary, permitindo escolher entre aparecer o sumrio como o exemplo acima, ou ento utilizando uma caixa de mensagem ou as duas formas de interao juntas.

www.marcelosincic.com.br

Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 18 de 41

4 Gerenciando Estado
Sempre necessrio guardar dados em algum tipo de repositrio para podermos consultar este dado posteriormente. Uma das formas de guardar estes dados utilizando controles hidden que ficam na pgina ou ento utilizando get, mas nestes casos o usurio poder ter acesso ao dado e altera-lo, executando com direito elevado, por exemplo, por mudar o nome do usurio. Para guardar dados utilizamos as variveis de sesso, mas precisamos conhecer tambm outros objetos, abordados adiante.

4.1 Variveis de Aplicao


As variveis de aplicao guardam valores globais do site, sendo perdidos apenas no momento em que for reiniciado o site ou quando no houver nenhum usurio logado. Estas so facilmente criadas por utilizar a seguinte sintaxe: Podemos utilizar a variavel de aplicao para montar um contador: Lembre-se de que as variveis de aplicao so compartilhadas entre todos os usurios de um mesmo site, mas no entre sites diferentes. Como existe o risco de mltiplos usurios estarem lendo as mesmas variveis, quando alterarmos o valor primeiro travamos a varivel para depois a alterar:
Application.Lock(); Application[Contador] = (int)Application[Contador] + 1; Application.Unlock(); Application[Contador] = (int)Application[Contador] + 1; Application[<nome da variavel>] = <valor desejado>

Com o cdigo acima conseguimos garantir a atualizao, uma vez que caso j esteja travada por algum o usurio seguinte espera at poder tambm utilizar.

4.2 Variveis de Sesso


As variveis de sesso so individuais para cada conexo, no tendo problemas de concorrncia por no terem qualquer compartilhamento. O controle das variveis de sesso feita pelo servidor onde os valores ficam guardados, e enviada ao usurio uma chave de sesso, formada por um guid do Windows de 16 bytes no repetitivo. O usurio recebe este id de sesso e ao se comunicar com o servidor envia este, o que permite ao servidor saber quais valores dentro de suas tabelas so relativos aquela conexo. Para criar variveis de sesso o processo e a sintaxe a mesma das variveis de aplicao, mas com a instruo session. O exemplo abaixo cria uma varivel de sesso para guardar o nome do usurio que est logado e define o tempo limite de inatividade para 10 minutos (o padro 20 minutos):
private void Page_Load(object sender, System.EventArgs e) { Session["Usuario"] = Request["Nome"].ToString(); Session.Timeout = 10; lblNome.Text = Request["Nome"].ToString(); lblEndereco.Text = Request["Endereco"].ToString(); lblTelefone.Text = Request["Telefone"].ToString(); }
www.marcelosincic.com.br Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 19 de 41

Em termos de segurana podemos afirmar que as variveis de sesso a forma mais utilizada e confivel, pois o usurio no tem como ler diretamente estes valores e nem como altera-los por cdigo de script cliente.

4.3 Cookies
A terceira forma de utilizar valores e reaproveit-los utilizando os cookies. Estes so arquivos texto criados na maquina do usurio, so facilmente lidos e alterados pelo usurio final, o que compromete a segurana. Em certos casos os cookies so teis como, por exemplo guardar dados no confidenciais do usurio para quando este retornar a pginas os valores j estarem preenchidos. A alterao de cdigo abaixo reflete a pgina de cadastro agora com os dados preenchidos e guardados no cookie:
private void Page_Load(object sender, System.EventArgs e) { if(Request.Cookies["Nome"] != null) { txtNome.Text = Request.Cookies["Nome"].Value.ToString(); txtEndereco.Text = Request.Cookies["Endereco"].Value.ToString(); txtTelefone.Text = Request.Cookies["Telefone"].Value.ToString(); } }

Note que foi utilizados o objeto request, aquele que permite ler dados do cliente, e este nos fornece os valores guardados nos cookies por referenciarmos o nome da varivel. necessrio antes de utilizar os valores de cookies verificar se estes no esto nulos, pois caso ainda no existam iro retornar exception. Abaixo segue o cdigo que gravar os cookies, sendo agora desnecessrio passar os dados do usurio pelo get como anteriormente era feito:
private void btnEnviar_Click(object sender, System.EventArgs e) { Response.Cookies["Nome"].Value = txtNome.Text; Response.Cookies["Nome"].Expires = DateTime.Now.AddMinutes(20); Response.Cookies["Endereco"].Value = txtEndereco.Text; Response.Cookies["Endereco"].Expires = DateTime.Now.AddMinutes(20); Response.Cookies["Telefone"].Value = txtTelefone.Text; Response.Cookies["Telefone"].Expires = DateTime.Now.AddMinutes(20); Response.Redirect("RecebeCadastro.aspx"); }

Para ser criado os valores no cookie utilizamos o objeto response que envia dados ao usurio, com o nome da varivel informada. Note que ao gravar um cookie necessrio informar a data de expirao, uma vez que se esta data no for informada, o cookie se torna temporrio. A data de expirao do cookie pode ser informada em horas, minutos, segundos ou mesmo data completa. No exemplo acima utilizamos a data atual mais vinte minutos como data de expirao.

4.4 Master Page


As Master Pages foram uma importante alterao no .net 2.0, permitindo criar mscaras para padronizao de sites com poucos cliques e totalmente visual. Para criar uma Master Page adicione um novo objeto ao seu projeto, notando que existe a opo para especifica. O contedo de uma Master Page sempre inclui um objeto do tipo ContentPlaceHolder que ser o local onde colocaremos os cdigos especficos de cada formulrio. O
www.marcelosincic.com.br Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 20 de 41

layout bsico da pgina mestre ir proporcionar uma grande rapidez no desenvolvimento, manuteno e visualizao das pginas em tempo real.

Note pelo exemplo acima que o texto Minha pgina padro est fora do quadro ContentPlaceHolder1, portanto aparecer em todas as pginas. Para criar uma pgina utilizando o mestre acima possvel utilizar pginas j existentes, porem ser necessrio retirar todas as tags de form para cima e para baixo, pois o objeto formulrio nestes casos j est na pgina mestre. Ao criar uma pgina escolha o template Web Content Form que na sequencia pede o nome da pgina mestre desejada e traz o layout abaixo. Note que as tags de formulrio, cabealho e corpo no existem, pois como j abordado esto dentro da mestre.

www.marcelosincic.com.br

Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 21 de 41

Todo o contedo especifico dever ficar dentro do quadro, sendo que nem possvel alterar a mestre, a no ser clicando no boto onde aparece o nome da pgina. Note que na diretiva da pgina contem o atributo MasterPageFile indicando a pgina mestre. O sinal ~ serve para indicar a raiz do site em qualquer local em que estiver a pgina ou link desejado. Caso a pgina mestre tenha que ser alterada por cdigo, o nico evento que d suporte o PreInit do formulrio.

4.5 Themes
O recurso de Temas a incorporao ao Visual Studio do j conhecido recurso Cascading Style Sheet (CSS). Este recurso padro do HTML permite definir um padro para que todas as tags fiquem pradronizadas. Vale a pena fazer a resalva de que o CSS altera o layout de tags HTML e no de tags ASP, ou seja, s funcionar corretamente quando envolve tags no browser padro a que se desenvolve, podendo gerar diferente tipo de layout em browsers alternativos, uma vez que o cdigo gerado pelo servidor varia conforme as capacidades e recursos do browser do cliente. Veja abaixo o exemplo de um CSS:

www.marcelosincic.com.br

Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 22 de 41

Para chegar a esta tela criamos uma nova ASP Folder do tipo Themes e dentro da pasta colocamos um arquivo do tipo Style Sheet. Para adicionar um novo elemento, ou a tag, a ser alterada utilizamos a opo Add Style Rule com o boto direito do mouse, que serve para incluir apenas as tags no contedo. Aps com o boto direito escolha a opo Build Style e configure como quer que a tag aparea no browser. O resultado da pgina pode ser visto abaixo:

www.marcelosincic.com.br

Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 23 de 41

Para definir o tema bastou indicar na propriedade Theme o nome da pasta criada anteriormente e em StyleSheetTheme o nome do arquivo css criado a pouco, e automaticamente ocorreu a alterao. Com este recurso, mudar o layout das letras e tags incluindo tabelas e outros contedos HTML ficou muito mais fcil, bastando alterar os arquivos css.

4.6 Skins
Vimos acima como os temas podem ajudar em muito o layout, mas ressaltamos o problema de que as tags no tema se referem ao HTML gerado no browser, o que pode causar problemas principalmente em dispositivos mveis. Uma forma de tambm utilizar o conceito de um padro, porem baseado nas tags ASP utilizar os skins. Eles devem ser adicionais dentro do tema, como um arquivo de skin, com o formato abaixo: Como podemos notar so exatamente as mesmas tags utilizadas no cdigo da pgina ASP, porem sem a tag ID. Veja o resultado grfico:
<asp:TextBox runat=server BackColor=AliceBlue Font-Names="Arial"></asp:TextBox> <asp:Label runat=server BackColor=Beige Font-Names="Courier" Font-Size=Large></asp:Label>

www.marcelosincic.com.br

Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 24 de 41

Os controles j esto formatados e podero ser utilizados com a formatao correspondente em diferentes browsers sem o problema das diferentes renderizaes.

5 AJAX.Net
O AJAX uma tecnologia para renderizao parcial de pginas HTML, que muito utilizada em sites como Google, Live Search, MSN e outros para atualizar blocos de pgina. Todo o processo de troca de dados com o servidor ocorre em background. O controle no Visual Studio foi criado de forma grfica e baseada em eventos, o que facilitou muito o uso do AJAX, que complexo quando construdo a mo.

O controle ScriptManager precisa estar em todas as pginas em que for utilizado o AJAX, pois ele faz o controle. Como em nosso exemplo a pgina mestre j contem um ScriptManager no seria necessrio colocar em cada um dos formulrios. O controle Timer permite criar, por exemplo, uma pgina onde parte dos controles se atualizariam de tempos em tempos.
www.marcelosincic.com.br Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 25 de 41

No exemplo acima o timer est configurado para rodar a cada 1 segundo (mil miliesegundos) e no evento Tick do timer alteramos o label1 com a hora atual. Para dizer que o evento Tick utiliza a tecnologia do AJAX utilizamos o controle UpdatePanel (onde o label est includo. Neste objeto indicamos qual o evento que ir gerar a atualizao do contedo, como mostrado abaixo nas propriedades do UpdatePanel:

www.marcelosincic.com.br

Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 26 de 41

Note a referencia ao evento Tick do objeto Timer1. Isso indica que a cada ciclo do timer o contedo do painel ser totalmente atualizado, independente dos controles que nele contenham. Portanto, caso exista em um formulrio diversos controles que se atualizam em momentos diferentes, como por exemplo diversos botes de ao, devemos ter vrios updatepanels. O resultado do cdigo acima uma pgina com um relgio que se atualiza a cada segundo, sem fazer a navegao completa da pgina. O controle Update Progress cria um painel dentro da pgina que nas propriedades ligado a um dos Update Panels e mostrado enquanto ocorre a navegao em background. Alm da propriedade onde indicado a qual Update Panels ele est vinculado, tambm indicamos o tempo aps o qual o contedo do Update Progress ir ser ativado.

www.marcelosincic.com.br

Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 27 de 41

6 Utilizando Controles com DataSet


Assim como uma aplicao Windows Forms, as aplicao web do VS 2008 permitem a construo grfica de data adapter, connections e datasets. Para utilizar dados em formulrio utilizamos o grupo de componentes Data Access, onde podemos utilizar controles para leitura de dados em SQL Server, Oracle, Access, Objects (dlls) ou XML. A primeira etapa em qualquer um dos Data Sources envolve as informaes referentes ao provedor de dados, e a seguir a tabela e os dados desejados:

Alem de indicar a tabela e as colunas desejadas, note que possvel fazer os filtros no boto Where e alterar a ordenao no boto Order By. No boto Advanced indicamos se dever ser gerado os comandos de Insert e Update para manuteno dos dados. Porem, na maior parte dos casos as alteraes so efetuadas em comandos programaticamente. Na sequencia da tela acima um boto Test Query permitir fazer o teste da query. A tela a seguir mostra as propriedades do controle Data Source e alterar o tempo de expirao do cache, alterar os comandos de banco de dados e escolher se ser gerado um DataSet ou um DataReader. A escolha deste ultimo item ajudar na manipulao programtica dos dados gerados pelos objetos de dados.

www.marcelosincic.com.br

Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 28 de 41

6.1

Utilizando DropDownList e ListBox

A diferena do dropdowlist, ou combo, que este tem dois locais para configurar origem. A primeira propriedade DataTextField indica a coluna que servir de origem para a lista que a combo apresenta, e a propriedade DataValueField em que coluna o valor corrente est na tabela. Ou seja, para montarmos uma lista de estados a propriedade Data Field to Display ser a tabela de estados e a coluna Nome, enquanto na propriedade Data Value to Value utilizamos a tabela de clientes, coluna UF. A figura abaixo mostra a tela de configurao da combo:

www.marcelosincic.com.br

Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 29 de 41

O Datalist tem uma construo diferenciada no .NET por utilizar o conceito de templates. Ao colocar uma lista de dados no seu formulrio, aparecer apenas a figura abaixo: Ao clicar com o boto direito no controle poder escolher montar o cabealho, rodap e itens que a lista mostrar, e para isso ter que arrastar legendas, caixas de texto, caixas de checagem e qualquer outro controle. Ou seja, o datalist funciona como um repetidor de controles inseridos dentro dele. O resultado aps configurarmos os templates de rodap e cabealho seria:

Ao configurarmos os templates de itens teremos a tela a seguir:

Nos templates acima foram escolhidos as colunas de nome e sobrenome para serem origem de dados das caixas de texto.
www.marcelosincic.com.br Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 30 de 41

O resultado final da pgina ao clicarmos em End Edition Template segue:

6.2 Utilizando o Form


Este controle muito similar ao DataList e permite demonstrar os dados utilizando formatos livres, como a tela a seguir:

Alem da escolha da fonte de dados e da formatao padro podemos escolher o que ser mostrado em cada uma das diferentes formas de visualizao dos dados, incluindo em caso de edio dos dados. No caso de utilizar o modo Edit temos acesso aos botes Update e Cancel que permitem a programao do cdigo que ir efetivar alteraes. O mesmo ir ser possvel configurar no modo de Insert.

6.3 Utilizando o DataGridView


Por ser o mais poderoso e til controle dos formulrios web, precisamos analisa-lo em detalhe. Para utiliza-lo basta arrastar o controle e definir a origem de dados, como a figura abaixo:

www.marcelosincic.com.br

Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 31 de 41

O auto format da grade de dados mostra a tela com os modelos grficos mais comuns: Ao termos informado a origem de dados, automaticamente a grade recebe as colunas da tabela utilizada, mas podemos customizar com o construtor clicando sobre o link Edit Columns onde podemos escolher as colunas incluindo colunas do tipo HyperLink onde podemos utilizar uma mscara de formatao para que um redirecionamento ocorra, como o exemplo abaixo: Note que para customizarmos a coluna deve desligar a opo criar colunas automaticamente, ou as colunas selecionadas iro ficar duplicadas. 6.3.1 Utilizando Link no Grid Uma necessidade comum ao se utilizar um grid selecionar uma determinada linha e editar seus dados. Para isso podemos utilizar os botes do grid ou hyperlink. Primeiro vamos ver como utilizar um hyperlink e como fazer por get a resposta ao valor clicado no grid. Crie uma nova coluna e utilize a opo hyperlink como fonte e configure a coluna de hyperlink com o texto desejado, a coluna de dados que ser utilizada no link e a formatao do texto, conforme a figura abaixo demonstra:

www.marcelosincic.com.br

Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 32 de 41

Note que o hyperlink gerado ir chamar a pgina Detalhes e ir passar como varivel, ou parmetro, o cdigo do histrico. Veja que no foi necessrio incluir nenhum cdigo programtico para este modelo funcionar, sendo simples e funcional. O resultado do grid com o hyperlink pode ser visto abaixo:

Na pgina Detalhes ser necessrio receber o valor e criar um dataadapter, como o exemplo a seguir do load desta pagina:
private void Page_Load(object sender, System.EventArgs e) { sqlDataAdapter1.SelectCommand.CommandText += " Where AU_ID='" + Request["Author"].ToString() + "'"; sqlDataAdapter1.Fill(dataSet11); TextBox1.DataBind(); TextBox2.DataBind(); }

Veja que utilizamos o parmetro enviado pelo grid para alterar o comando select para que este traga apenas o autor desejado, conforme o cdigo recebido.

www.marcelosincic.com.br

Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 33 de 41

6.4 Utilizando o DetailsView


Este controle segue a mesma formatao do Data Grid View, porem ao invs da visualizao na horizontal os dados so mostrados em vertical. A tela a seguir mostra o formato do objeto:

Note que alem da auto formatao no h muitas opes exceto a Edit Fields para escolher as colunas desejadas. O restante das configuraes feita na janela de propriedades com a possibilidade de escolher os botes para programao dos cdigos necessrios a manipular os dados. Para isso mude a janela de propriedades para o modo eventos e notar que os eventos para cada uma das operaes desejadas estar disponvel para programao.

www.marcelosincic.com.br

Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 34 de 41

7 Criando Controles Customizados


Nas aplicaes windows forms podemos criar user controls que permitem fazer caixa de texto e qualquer outro objeto como componente que era includo em formulrios. Tambm existem controles customizados (ou web user controls) no ASP.NET. Estes funcionam como se fossem includos na pgina principal. Imagine que o cdigo que for utilizado para criao deste tipo de objeto v ser somado no cdigo da pgina em que foi inserido. Por exemplo, podemos criar um controle que far o papel do cabealho de todas as pginas, veja abaixo o layout criado:

Figura 14 - Web User Control de cabealho

Note que a extenso deste tipo de objeto ascx, e seu cdigo html no contem as tags de cabealhos e corpo, uma vez que ser colocado dentro de outras pginas e estas tags no podem se repetir:
<%@ Control Language="c#" AutoEventWireup="false" Codebehind="Cabecalho.ascx.cs" Inherits="WebApplication1.Cabecalho" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%> <TABLE id="Table1" cellSpacing="1" cellPadding="1" width="100%" border="1"> <TR> <TD width="33%"> <asp:Label id="lblUsuario" runat="server"></asp:Label></TD> <TD width="33%"> <asp:Label id="lblDataHora" runat="server"></asp:Label></TD> <TD width="34%"> <asp:Label id="lblPagina" runat="server"></asp:Label></TD> </TR> </TABLE>

Podemos ver que a diretiva da pgina tambm diferente porque as diretivas vistas anteriormente eram com page e esta utiliza control. Continuando o exemplo, vamos utilizar o controle de cabealho para obrigar o usurio a preencher seus dados para depois poder utilizar qualquer pgina, para evitar que as pginas sejam chamadas sem que o usurio tenha passado pelo login:
private void Page_Load(object sender, System.EventArgs e) { if(Session["Usuario"]==null) Response.Redirect("login.aspx"); else { lblUsuario.Text = Session["Usuario"].ToString(); lblDataHora.Text = DateTime.Now.ToString(); lblPagina.Text = AppDomain.CurrentDomain.RelativeSearchPath.ToString(); } }

www.marcelosincic.com.br

Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 35 de 41

Como pode ser visto neste cdigo, se a varivel de sesso estiver vazia porque o usurio ainda no passou pelo logon, e como este cabealho estar em todas as pginas, resolveremos o problema de algum tentar utilizar um link direto. Quando o usurio estiver devidamente identificado, a pgina resultante:

Figura 15 - Pgina com o cabealho

Tambm podemos colocar propriedades no controle, utilizando propriedades da linguagem e neste caso precisamos criar a referencia no code behind, uma vez que ao inserir um web user control na pgina, o VS 2008 no incluir a referencia, como explicado anteriormente. Neste caso, teramos que incluir na pgina ListaCadastro a referencia:
protected Cabecalho Cabecalho1;

www.marcelosincic.com.br

Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 36 de 41

8 Segurana de Acesso
A segurana de um site pode ser feita utilizando mtodos prontos do servidor web, no caso da Microsoft o Internet Information Server (IIS), ou utilizando mtodos programticos. O mais importante validar o usurio e certificar-se, como fizemos com o user control acima, que uma pgina no seja chamada sem autenticao.

8.1 Autenticao Annima


A autenticao do IIS normalmente annima, uma vez que se formos cadastrar no windows todos os usurios que forem acessar o site, teramos um grande problema. Para sabermos se a autenticao no IIS annima podemos consultar a propriedade: A autenticao annima exige algum outro mtodo de autenticao programtica, como por exemplo, manter um banco de dados com usurios e senhas e fazer uma consulta a este banco de dados para saber se o usurio valido. Como exemplo podemos imaginar um formulrio com uma caixa de texto, uma caixa de senha e um boto de acesso, onde o cdigo do boto seria:
private void Button1_Click(object sender, System.EventArgs e) { string DML = "Exec Proc_Usuario '"; DML += txtUsuario.Text + "','"; DML += pwdSenha.Text + "'"; sqlDataAdapter1.SelectCommand.CommandText = DML; sqlDataAdapter1.Fill(dataSet11); if(dataSet11.Tables["Usuarios"].Rows.Count==0) return; else { Session["Usuario"] = txtUsuario.Text; Response.Redirect("listacadastro.aspx"); } } Request.IsAuthenticated = false

Veja que no exemplo acima utilizamos uma stored procedure que recebe como parmetros o nome e senha e retorna os dados do usurio. Se o numero de linhas retornadas for igual a zero porque os dados no foram encontrados, e neste caso voltamos a mesma tela. Se houve retorno positivo guardamos o usurio na sesso para identifica-lo e redirecionamos para a pgina com o menu ou outra desejada.

8.2 Autenticao pelo Windows


No caso de autenticao configurada no IIS como integrada podemos identificar utilizar o arquivo web.config para o controle de acesso. Podemos fazer esta configurao utilizando a sesso authentication, como o exemplo a seguir demonstra seu uso:
<authorization> <allow users="Marketing" /> <!Grupo de marketing --> <allow users="Financeiro" /> <!Grupo do financeiro --> <deny users="?" /> <!Proibe os anonimos --> </authorization>
www.marcelosincic.com.br Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 37 de 41

Nesta configurao vemos que usurios dos grupos marketing e financeiro tem acesso permitido e os annimos, representados pelo ?, so bloqueados. Tambm possvel representar todos os usurios utilizando *.

8.3 Autenticao por Formulrio


A autenticao por formulrio se parece muito ao modelo que criamos anteriormente com o user control, onde caso exista um cookie criptografado na maquina do usurio significa que ele fez o logon, e caso ainda no o tenha feito automaticamente o framework ir envia-lo a pgina de logon referenciada no web.config. Para configurar este modelo configuramos o web.config como a seguir:
<authentication mode="Forms"> <forms loginUrl="login.aspx" name="form1" path="/" > <credentials passwordFormat="Clear"> <user name="txtUsuario" password="pwdSenha"/> </credentials> </forms> </authentication> <authorization> <allow users="Marketing" /> <!Grupo de marketing --> <allow users="Financeiro" /> <!Grupo do financeiro --> <deny users="?" /> <!Proibe os anonimos --> </authorization>

Neste modelo o procedimento semi-automtico, mas tem a limitao do uso do cookie e em caso do usurio abrir e fechar o browser a autenticao no solicitado, o que prejudica em casos que mais de uma senha utilizada na mesma mquina.

8.4 Autenticao por Passport


Autenticao por Microsoft .NET Passport o mesmo utilizado no msn messenger, mas neste caso precisa-se baixar o Passport SDK e criar a interface completa para uso, bem como ter um certificado emitido pela Microsoft para autorizar o seu site a utilizar os dados do Passport. Mas o maior problema neste caso a limitao, uma vez que nem todos os usurios so obrigados, nem podem ser, a utilizar o Microsoft Passport.

www.marcelosincic.com.br

Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 38 de 41

9 Trace e Debug
O Debug no ASP.NET idntico a debug em aplicaes windows forms, com a nica mudana que o browser fica aberto a parte para permitir o debug. Outra limitao muito sria do debug que o servidor IIS onde o site est hospedado fica travado durante o perodo de debug, o que pararia outros usurios e desenvolvedores enquanto o debug estiver ativo. J o recurso de trace muito interessante para verificar dados, e muito simples de ser ligado. Para ativar o trace habilite a propriedade trace do formulrio e defina em tracemode se deseja ordenado por ordem de execuo ou por categoria, sendo este ultimo o padro. Aps ligar o trace e rodar a pgina ver o seguinte resultado: Request Details
Session Id: Time of Request: Request Encoding: t4isii55pvffzg45ymd5hsfu 23/8/2004 16:07:33 Unicode (UTF-8) Request Type: Status Code: Response Encoding: From First(s) 0,010611 0,032066 0,032124 0,037154 0,048466 0,048564 0,175022 GET 200 Unicode (UTF-8) From Last(s) 0,010611 0,021454 0,000059 0,005030 0,011311 0,000098 0,126458 Viewstate Size Bytes (excluding children) 20 0 0 0 0 0 0 0 0 0 0 Value

Trace Information
Category aspx.page aspx.page aspx.page aspx.page aspx.page aspx.page aspx.page aspx.page Message Begin Init End Init Begin PreRender End PreRender Begin SaveViewState End SaveViewState Begin Render End Render

Control Tree
Render Size Bytes (including children) __PAGE ASP.login_aspx 1601 _ctl0 System.Web.UI.ResourceBasedLiteralControl588 Form1 System.Web.UI.HtmlControls.HtmlForm 959 _ctl1 System.Web.UI.ResourceBasedLiteralControl339 txtUsuario System.Web.UI.WebControls.TextBox 55 _ctl2 System.Web.UI.LiteralControl 113 pwdSenhaSystem.Web.UI.WebControls.TextBox 55 _ctl3 System.Web.UI.LiteralControl 113 btnLogin System.Web.UI.WebControls.Button 68 _ctl4 System.Web.UI.LiteralControl 42 _ctl5 System.Web.UI.LiteralControl 54 Control Id Type

Session state
Session Key HoraLogon System.DateTime Type 23/8/2004 16:07:34 Type System.Int32 Name Value 2 Size

Application State
Application Key Contador Value

Cookies Collection
ASP.NET_SessionId Name Connection Accept Accept-Encoding Accept-Language
www.marcelosincic.com.br

t4isii55pvffzg45ymd5hsfu Value

42

Headers Collection
Keep-Alive */* gzip, deflate pt-br

Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 39 de 41

Cookie Host User-Agent

ASP.NET_SessionId=t4isii55pvffzg45ymd5hsfu Localhost Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2; .NET CLR 1.1.4322) Name Value HTTP_CONNECTION:Keep-Alive HTTP_ACCEPT:*/* HTTP_ACCEPT_ENCODING:gzip, deflate HTTP_ACCEPT_LANGUAGE:pt-br HTTP_COOKIE:ASP.NET_SessionId=t4isii55pvffzg45ymd5hsfu HTTP_HOST:localhost HTTP_USER_AGENT:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2; .NET CLR 1.1.4322) Connection: Keep-Alive Accept: */* Accept-Encoding: gzip, deflate Accept-Language: pt-br Cookie: ASP.NET_SessionId=t4isii55pvffzg45ymd5hsfu Host: localhost User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2; .NET CLR 1.1.4322) /LM/w3svc/1/root/WebApplication1 c:\inetpub\wwwroot\WebApplication1\

Server Variables
ALL_HTTP

ALL_RAW

APPL_MD_PATH APPL_PHYSICAL_PATH AUTH_TYPE AUTH_USER AUTH_PASSWORD LOGON_USER REMOTE_USER CERT_COOKIE CERT_FLAGS CERT_ISSUER CERT_KEYSIZE CERT_SECRETKEYSIZE CERT_SERIALNUMBER CERT_SERVER_ISSUER CERT_SERVER_SUBJECT CERT_SUBJECT CONTENT_LENGTH 0 CONTENT_TYPE GATEWAY_INTERFACE CGI/1.1 HTTPS off HTTPS_KEYSIZE HTTPS_SECRETKEYSIZE HTTPS_SERVER_ISSUER HTTPS_SERVER_SUBJECT INSTANCE_ID 1 INSTANCE_META_PATH /LM/W3SVC/1 LOCAL_ADDR 127.0.0.1 PATH_INFO /WebApplication1/login.aspx PATH_TRANSLATED c:\inetpub\wwwroot\WebApplication1\login.aspx QUERY_STRING REMOTE_ADDR 127.0.0.1 REMOTE_HOST 127.0.0.1 REMOTE_PORT 1862 REQUEST_METHOD GET SCRIPT_NAME /WebApplication1/login.aspx SERVER_NAME localhost SERVER_PORT 80 SERVER_PORT_SECURE 0 SERVER_PROTOCOL HTTP/1.1 SERVER_SOFTWARE Microsoft-IIS/5.1 URL /WebApplication1/login.aspx HTTP_CONNECTION Keep-Alive HTTP_ACCEPT */* HTTP_ACCEPT_ENCODING gzip, deflate HTTP_ACCEPT_LANGUAGEpt-br HTTP_COOKIE ASP.NET_SessionId=t4isii55pvffzg45ymd5hsfu HTTP_HOST Localhost HTTP_USER_AGENT Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2; .NET CLR 1.1.4322)

www.marcelosincic.com.br

Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 40 de 41

Veja nos retornos que podemos ler a situao da pgina, como os dados foram enviados, quais dados esto na sesso, etc. Um importante dado est na sesso Control Tree onde podemos ler o tempo acumulado e o tempo individual de cada mtodo, encontrando os mtodos que causaram mais impacto de performance.

9.1 Mensagens Customizadas no Trace


Tambm pode ver a ordem dos eventos e inserir cdigos para sabermos quando determinadas situaes ocorreram, como por exemplo, fazemos em aplicaes windows forms com o console.writeline. Para isto utilizamos o objeto trace que possui o mtodo Write para mostrar uma linha no grupo Control Tree em cor preta ou utilizar o mtodo Warn que tambm mostra a linha mas na cor vermelha, obtendo destaque na lista.

9.2 Tipos de Sada


A sada dos dados tanto pode ocorrer na mesma pgina que os controles ou em outra pgina. A principio utilizamos a prpria pgina, mas neste caso temos que utilizar o modelo de layout Internet explorer 3.02 pois como o trace vem na seqncia da pgina, se ela estiver em schema Internet Explorer 5.0 a pgina do trace ficar escondida por baixo dos controles. O outro modelo de sada o de pgina, gerando uma nica pgina no site de trace.axd, portanto sendo sobreposta constantemente, mas com a vantagem de no poluir a pgina como o trace embutido. Para configurar os tipos de sada altera o web.config na sesso trace: Nesta configurao o trace fica na prpria pgina e com true ser criada a pgina trace.axd.
pageOutput="false"

www.marcelosincic.com.br

Reproduo e distribuio livre

Verso: 2.0

www.marcelosincic.com.br

Pgina 41 de 41

10 Distribuio
Para distribuir uma aplicao em ASP.NET basta copiarmos os arquivos a seguir: Tipo ou Nome Funo Extenso aspx Pginas com os cdigos html Extenso ascx Pginas com cdigos html dos user controls Extenso dll Code Behind das pginas, cada projeto gera um web.config Configuraes da aplicao e segurana Destino raiz raiz raiz\bin raiz

Quando copiamos os arquivos o framework sempre procura a classe da pgina no diretrio bin de onde ela est. Ou seja, podemos desenvolver um sistema usando quatro projetos mas utilizando um nico site na distribuio, bastando copiar as quatro dll no diretrio bin do site e o restante todos juntos na raiz do site. Ainda para funcionar, aps criar o diretrio do site necessrio habilitar a aplicao no IIS, bastando clicar no boto abaixo do IIS Manager:

Figura 16 - Configurao da aplicao no IIS

Ao clicar no boto Configurao pode-se mudar algumas caractersticas do site, como por exemplo, o tempo de timeout padro da sesso. Tambm nestas configuraes podemos na aba Erros Personalizados mudar as pginas padro de erro para tornar amigvel e personalizado com logo da empresa os erros que podem ocorrer, como por exemplo, de pgina no encontrada.

www.marcelosincic.com.br

Reproduo e distribuio livre

Você também pode gostar