Sei sulla pagina 1di 212

ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados.

Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual;

Este documento de distribuio gratuita para uso pessoal. vedada qualquer outra forma de utilizao, divulgao, publicao, distribuio etc. sem autorizao do autor.

Sobre o Autor Fernando Amaral trabalha a mais de 10 anos com o desenvolvimento de software. certificado Microsoft MCP, MCAD, MCSD, MCDBA e MCT, Comptia CDIA+, Project Managment Institute PMP. Ps Graduado em Gesto de Sistemas de Informao pela Uniderp e em Melhoria de Processo de Software pela UFLA. Alm disso tudo Ateu. Atualmente reside em Campo Grande MS.

Sobre www.fernandoamaral.com.br Eu mantenho um site com alguns artigos e tutoriais de tecnologia no endereo www.fernandoamaral.com.br. Atravs do site existe um formulrio onde posso ser contatado.

Sobre ASP.NET 3.5 em VB.NET e C# Existe muito contedo para quem quer aprender ASP.NET. Existem centenas de bons livros. Porm este curso em formato digital traz algumas caractersticas que talvez voc no encontre em nenhum lugar:

completo no sentido que abrange todos os principais temas relacionados ao ASP.NET 3.5; Segue uma seqncia lgica. Voc no precisar ficar garimpando informaes em lugares diferentes; em portugus.

Porque no um Livro? Este curso foi criado dentro de minhas possibilidades, de maneira que no precisei assumir nenhum compromisso.

ASP.NET 3.5 em VB.NET e C# 1. Introduo ao ASP.NET.................................................... 7 2. Visual Studio 2008: O ambiente e as linguagens............. 13 3. Web Forms....................................................................... 31 4. Controle............................................................................ 33 5. Master Page...................................................................... 44 6. Themes e Skins................................................................. 53 7. Navigation........................................................................ 59 8. WebParts.......................................................................... 71 10 LINQ .............................................................................. 116 11. MemberShip e Roles ..................................................... 119 12 .Manuteno de Estado................................................... 153 13 . ASP.NET AJAX ........................................................... 167 14. Criando e Consumindo WebServices ............................ 179 15. Criando uma pgina de erros personalizada................... 188 16. Eventos da aplicao...................................................... 191 17. Distribuindo sua Aplicao ........................................... 193 18. Relatrios com Crystal Report ...................................... 202

1. Introduo ao ASP.NET
Desenvolver aplicaes nunca foi to fcil. Ambientes RAD cada vez mais modernos e amigveis tem tornado o trabalho dos arquitetos de software cada vez mais simples. Com o verso 3.5 do ASP.NET, conseguiu-se atingir nveis de produtividade nunca antes imaginados.

Este curso tem por objetivo introduzir o desenvolvedor no mundo do desenvolvimento de aplicaes Web utilizando o ASP.NET 3.5. No um curso introdutrio de lgica de programao.

Os exemplos ao longo do curso sero todos demonstrados em VB.NET e C#.

Blocos de cdigo sero precedidos pelo cone da linguagem utilizada: para cdigo em VB para cdigo em C# O que o Microsoft .NET FrameWork? Tradicionalmente o desenvolvedor escreve Software para um sistema Operacional ou dispositivo especifico. Por exemplo, ao criar um programa no Delphi 7 ou no Visual Basic 6, ele esta criado um Software para rodar em Sistemas Operacionais Windows sobre a plataforma Intel.

Ao desenvolver um software para o .NET, o desenvolvedor ao invs disto esta fazendo um software para rodar em qualquer dispositivo ou plataforma que tenha o .NET Framework instalado.

Existem dezenas de linguagem que podem ser usadas para criar um programa .NET, a Microsoft desenvolveu o VB.NET, uma verso Orientada a Objetos do clssico VB e o C#, que herdou sua sintaxe do C++. Outras empresas desenvolveram outras: COBOL, Delphi, Fortran etc. s para citar algumas. Voc mesmo pode criar sua prpria linguagem. A escolha entre uma linguagem ou outra apenas uma questo de sintaxe.

6
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Isto possvel porque um programa escrito para .NET compilado em uma linguagem intermediaria chamada MSIL (Microsoft Intermediate Language). No importa qual linguagem em que voc codificou, o resultado, em termos de performance, qualidade, tamanho dos binrios etc. ser o mesmo. O arquivo compilado em MSIL normalmente resulta um uma DLL, denominada assembly.

Quando o programa for executado pela primeira vez, entre em cena o JIT (Just In Time Compiler), que vai fazer uma nova compilao do programa, desta vez de acordo com as especificaes do sistema operacional e do dispositivo em que o .NET Framework se encontra.

Desenvolver um sistema para o plataforma .NET, traz mais alugmas vantagens alm de das ficaram bvias nesta introduo. A mais importante que o seu programa vai rodar em um ambiente protegido e especifico, sem ter que se preocupar com as especificaes ou problemas do sistema operacinal. Toda a interao com este, como por exemplo, o gerencimento de memria, feita pelo .NET. ASP.NET 1.X Nos ultimos anos surgiram fantsticas IDEs para desenvolvimento de aplicaes Windows. Algumas permitiam que voc abrisse uma tabela qualquer, permitindo ainda a sua edio, sem sequer escrever uma linha de cdigo. Outras atravs de assistentes automatizavam tarefas poupando tempo e muitas dores de cabea. Surgiram ainda diversas ferramentas que prometiam a criao de aplicativos inteiros sem a necessidade de escrever uma linha de cdigo qualquer.

Porem no podemos dizer o mesmo para as aplicaes Web. Alm algumas frustadas tentativas, no existiu nenhum ambiente de alta produtividade como existiam para aplicaes convencionais. As linguagens, principalmente o ASP classico, semelhante ao Visual Basic, era limitada sem os recusos de linguagens OO.

Ao planejar o .NET, a Microsoft vislumbrou um ambiente para aplicaes Web onde se pudesse desenvolver aplicaes no mesmo ambiente e com as mesmas facilidades de aplicaes convencionais, utilizando a mesma linguagem. 7
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

O ASP.NET foi o primeiro ambiente que permitiu que se desenvolvessem aplicaes convencionais ou para Web em uma mesma IDE, utilizando a mesma linguagem. Promessa cumprida: O .NET 1.x junto com o Visual Studio 2002 / 2003 proporcionou um ambiente para aplicaes WEB, totalmente integrado, com as facilidades s antes vistas em ambientes de aplicaes convencionais: WYSIWYG, Drag and Drop,

Intellisense, recursos de depurao avanados etc. J era possivel exibir uma tabela numa aplicao WEB com duas linhas de cdigo, e sem escrever uma Tag HTML sequer! Normalmente voc no precisa ser um profundo conhecedor de HTML para desenvover uma aplicao Web no VS 2005. Porm um conhecimento bsico recomandado: sempre h necessidade de algum ajuste manual. ASP.NET 2.0 No h duvidas que a plataforma .NET 1.x e o ASP.NET 1.x mudaram a maneira como as aplies Web so desenvolvidas. Porm a equipe de desenvolvimento da plataforma percebeu que muito ainda poderia ser feito, principalmente no que diz respeito a produtividade, e esse foi o objetivo principal da equipe de durante seu

desenvolvimento. Como resultado, houve uma melhora de produtividade em at 70% ! Vejamos algumas das melhorias do ASP.NET 2.0 em relao ao seu antecessor: Mais de 50 novos Server Controls Novas ferramentas adiminstrativas Nova IDE do Visual Studio 2005 Site Navigation: Controles que facilitam a navegao em Web Sites Master Pages: Agora possvel utilizar herana visual em aplicaes Web, o que na verso 1.x s era possivel com aplicaes Windows Forms. Themes: Tornam mais facil o gerenciamento do visual de sua aplicao Acesso a Dados: O ADO.NET embora extramente eficiente, era

demasiadamente complexo. O Acesso a dados foi reformulado e simplificado. Snippets: Partes de cdigos especificas que podem ser armazenadas para utilizao futura.

8
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

ASP.NET 3.5 As mudanas do ASP.NET 2.0 e 3.5 foram poucas, porm significativas. Na verdade o core engine das duas verses continua o mesmo. Para projetos em ASP.NET 3.5 o ASP.NET AJAX Extensions passou a estar integrado a IDE do Visual Studio, no mais necessrio baixar e instalar separadamente. encontrado no assemblie System.Web.Extensions.dll.

Outra grande novidade, j h bastante esperada o LINQ. A Gap que existe entre dados relacionais e objetos j no um assunto novo, j recebendo inclusive artigos meus. J postei tambm alguns artigos tcnicos sobre LLBLGen e NHibernate. Agora o .NET avana nesse sentido com o LINQ. O LINQ no nenhuma novidade, porm agora integrado ao Visual Studio. A idia do LINQ tambm no nova, com esta tecnologia voc pode operar o banco de dados em uma linguagem nativa, como se tivesse gerando cdigo VB.NET ou C#. encontrado nos assemblies System.Core.dll,

System.Data.Linq.dll, System.Xml.Linq.dll e System.Data.DataSetExtensions.dll.

Tambm h controles novos. Alm dos controles Ajax Extensions que na verso anterior deviam ser instalados separadamente, existem mais trs novos controles: ListView, DataPager e LinqDataSource. O Listview um controle de exibio de dados tabulares, semelhante ao Datagrid e GridView, porm com novas funcionalidades e maior controle sobre o resultado produzido. DataPager um controle que prove paginao de dados ao Listview. LinqDataSource mais um controle de acesso a dados, como ObjectDataSource e o SQLDataSource, porm utilizando o modelo LINQ descrito em sesso anterior. Estrutura de uma aplicao ASP.NET 2.0 e 3.5 Nesta sesso apresento algumas consideraes sobre o estrutura de aplicaes ASP.NET 2.0 e 3.5, que como dito em seo anterior, permaneceram inalterados.

Voc j percebeu que muita coisa mudou entre o ASP.NET 1.x e seu predecessor. Uma das grandes propagandas no lanamento da primeira verso do ASP.NET era o modelo code-behind, onde apresentao e cdigo de servidor ficam armazenados em arquivos 9
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

fisicamente separados, tornando o cdigo mais limpo e intuitivo tanto para o designer quanto para o programador. Trabalhar com tudo em um nico arquivo at era possvel, porm desvantajoso.

No ASP.NET 3.5, embora o padro seja um arquivo nico, pode-se facilmente optar em trabalhar com arquivos separados, basta desmarcar a opo place code in separated file na caixa de dialogo de criao de um novo Web Form:

Este novo modelo denominado code-inline. Se voc optar por trabalhar com este modelo, seu cdigo de servidor vai estar separado entre tags Script. O grande problema na verso 1.x era que trabalhando com um nico arquivo perdamos alguns recursos poderosos de programao, como o Intellisense. Na verso 2.0 e 3.5 no h qualquer problema: tudo que funciona no modelo code-behind funciona tambm no code-inline. Post-Back entre pginas At o.NET 1.x um controle s poderia causar um post back para a prpria pgina. Agora esta limitao acabou, atravs da propriedade PostBackUrl, presente no boto de comando e similares, que permite que seja executa um postback para outra pagina Asp. Este novo recurso conhecido como Cross-Page Posting. 10
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Agora possvel inclusive ler valores de controles ou propriedades de pginas que deram origem ao postback. Esta fantstica inovao surgida no ASP.NET 2.0 permite tornar o cdigo mais limpo, mas otimizado, alm de reduzir a necessidade de utilizao de variveis de sesso, querystring e outros. Pastas A partir da verso 2.0 o ASP.NET uma aplicao Web deixou de ser orientada a projeto e passou a ser orientada a arquivos. Em conseqncia foram definidas uma srie de pastas com funes especificas, vamos ver as principais: App_Code: Para armazenamento de classes App_data: Armazena fontes de dados App_Themes: Armazena um tema. Estudaremos temas mais adiante. App_LocalResources: Armazena arquivos de recursos Arquivos Nesta sesso vamos ver os principais tipos de arquivos que uma aplicao ASP.NET pode conter:

Web.config: um arquivo contendo as configuraes da aplicao, formatado com XML. .aspx: arquivo contendo a apresentao de uma pgina. .vb ou .cs: arquivo com cdigo de servidor relacionado a uma pgina Global.aspx: Arquivo contendo os eventos globais da aplicao. .master: Arquivo contendo uma MasterPage. .ascx: Arquivo contendo um WebUserControl .css: Arquivo css .resx: Arquivo de recursos .sitemap: Arquivo contendo um mapa do site .skin: Arquivo contendo um skin

11
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

2. Visual Studio 2008: O ambiente e as linguagens


Nesta seo vamos ver os principais compontentes da IDE do VS 2008.

A esquerda, por padro oculta, existe a Barra de Ferramentas, onde ficam agrupados por categoria os compontes padro do VS ou de terceiros instalados no ambiente. Para instalar um novo componente, basta clicar com o boto direito sobre a barra e selecionar Choose Itens. Voc pode tambm personalizar a sua barra de ferramentas da maneira que achar melhor.

A direita temos o Solution Explorer, que permite uma navegao rpida entre os arquivos de um projeto ou soluo.

Abaixo, a janela de propriedades, permite configurar as propriedades de um controle ou de um formulrio, bem como acessar eventos.

Entre as principais novidades do ambiente temos as notificaes de status da linha atravs de cores: Uma nova linha de cdigo ou cdigo alterado marcado como amarelo. Se a linha j foi salva sua cor muda para verde.

12
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Outra novidade so os Snippets: pedaos de cdigo pr fabricados para executar uma tarefa especifica. Tudo bem que isso no uma grande novidade e j foi utilizada em outras IDEs por a a fora, mas com certeza o recurso esta melhor do que nunca e poder lhe ajudar a poupar bastante trabalho. Para inserir um Snippet basta chama-lo no menu rpido sobre a rea de cdigo. Obviamente que voc tambm poder criar seus proprios snippets. SINTAXE: VISUAL BASIC .NET e C# Vamos introduzir os principais aspectos d a sintaxe de programao do VB.NET e do C#. Este no ser um estudo completo ou abrangente, para tal procure bibliografia especfica. Lembre-se sempre que o C# diferencia entre caracteres maisculos e minusculos, o VB.NET no. Voc j deve ter encontrado discusses ardentes na internet sobre C# ser melhor que VB.NET e vice-versa. A verdade que conhecendo os fundamentos da plataforma sabemos que o resultado exatamente igual. Comentrios No C# comentrio de linha so feitos com duas barras. Comentrios em bloco so aberto com \* e fechados com *\.

No VB.NET Comentrios so inseridos com aspas simples no inicio da linha. O VB.NET no permite o comentrio de blocos de cdigo, a soluo comentar linha a linha. Porm o Visual Studio possui em sua barra de ferramentas padro o comando Comment out the selected lines que comenta um bloco de cdigo selecionado e Uncomment the selected lines que remove os comentrios, a utilizao simples e intuitiva, e funcina em ambas as linguagens
este um comentrio vlido Dim i as Integer esta tambm um comentrio vlido

//este um comentrio vlido int x = 3; /* este tambm um comentrio vlido */

13
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Voc ainda pode criar comentrios no VB.NET utilizando Rem. No Visual Studio 2008 tambm possvel documentas seu cdigo sem a necessidade de instalar qualquer plug-in, basta adcionar trs aspas (vb.net) ou tres barras (C#) antes do procedimento. O VS automaticamente preenche o esqueleto do documento. Observe o exemplo abaixo:

''' <summary> ''' Funo para somar dois nmeros ''' </summary> ''' <param name="x">Primeiro nmero a somar</param> ''' <param name="y">Segundo nmero a somar</param> ''' <returns>Resultado da soma</returns> ''' <remarks>By Fulano</remarks> Public Function Somar(ByVal x As Integer, ByVal y As Integer) _ As Integer Dim z As Integer z = x + y Return z End Function

/// /// /// /// /// /// int {

<summary> Funo para somar dois nmeros </summary> <param name="x">Primeiro nmero a somar</param> <param name="y">Segundo nmero a somar</param> <returns>Resultado da soma</returns> Somar(int x, int y) int z; z = x + y; return z;

O VS ainda pode gerar um diagrama de sua classe, basta clicar com o boto direito sobre o arquivo, e selecionar View Class Diagram Tipos de Dados Sendo o .NET um framework, no existem tipos de dados desta ou daquela linguagem. Os tipos so todos do .NET. Obviamente que existem diferenas de sintaxe na declarao e manipulao destas variaveis. Abaixo segue uma relao dos principais tipos de dados, para uma relao completa consulte a documentao do VS 2008:

14
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Boolean Verdadeiro ou falso Char - caractere unicode de 16 bit String - String Byte inteiro de 8 bit, sem sinal UInt16 - inteiro de 16 bit, sem sinal UInt32 - inteiro de 32 bit, sem sinal UInt64 - inteiro de 64 bit, sem sinal Int16 inteiro de 16 bit, com sinal Int32 - inteiro de 32 bit, com sinal Int64 - inteiro de 64 bit, com sinal SByte - - inteiro de 8 bit, com sinal DateTime data e hora

Decimal nmero decimal Double nmero de ponto flutuante com 64 bit

Single - nmero de ponto flutuante com 32 bit

Um valor nulo em VB.NET representado por NOTHING, em C# por null.

O tipo Int32 pode ser representado no VB.NET por Integer e int no C#.

Operadores VB.NET And Or XOr Not Is Nothing <> & \ \= Mod = C# & | ^ ! == null != + / /= % ==

15
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Variaveis e Constantes No VB.NET para declarar uma varivel usamos a palavra DIM, seguido pelo nome da varivel e tipo:

Dim i as Integer

A sintaxe do C# semelhante ao do C++:

int z;

Podemos ainda declara diversas variaveis de um mesmo tipo numa unica declarao:

Dim i,j,k as Integer

int x, y, z;

Ou ainda variaveis de diferentes tipos:

Dim i,m as Integer, j,k as Single

int i, m; Double j,k;

Obviamente i e m sero do tipo inteiro, e j e K do tipo single.

possvel ainda incializar a varivel na sua declarao:

Dim i as Integer = 1

int z = 1;

Para declarar uma constante utilizamos a declarao Const:

Const x as integer = 1

16
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

const int x = 1;

Enumeradores Para declarar um enumerador usamos a declarao Enum

Public Enum Semana Domingo Segunda Tera Quarta Quinta Sexta Sabado End Enum

enum Semana { Domingo, Segunda, Tera, Quarta, Quinta, Sexta, Sabado };

Voc opcionalmente pode inicializar cada menbro, se voc no o fizer, o primeiro menbro ser inicializado com zero e assim sucessimvamente.

Enum Semana Domingo = 1 Segunda = 2 Tera = 3 Quarta = 4 Quinta = 5 Sexta = 6 Sabado = 7 End Enum

enum Semana { Domingo = 1, Segunda =2, Tera =3, Quarta =4, Quinta =5, Sexta =6, Sabado =7 };

Colees Poderamos dedicar um longo captulo ao estudo de coleo, sendo nosso objetivo fazer uma introduo a parte de sintaxe, veremos apenas arrays:

Dim MeuArray(1) As String MeuArray(0) = "Um" MeuArray(1) = "Dois"

17
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

string[] MeuArray = new string[1]; arr[0] = "Um"; arr[1] = "Dois";

Ao contrrio do legado VB, um array possui sempre ndice iniciado em zero, portanto um array declarado com (1), ter duas posies. Estruturas de deciso O classico if no poderia faltar. A sintaxe semelhante as suas linguagens legadas:

Dim Nome As String = "ASP.NET" If Nome = "VB.NET" Then MessageBox.Show("Certo!") Else MessageBox.Show("Errado!") End If

string Nome = "ASP.NET"; if (Nome == "C#") { MessageBox.Show("Certo!"); } else { MessageBox.Show("Errado!"); }

Obviamente que a intruo else opcional.

Outra forma de controle de fluxo conhecido o Select (VB.NET) ou Switch (C#):

Dim Nome As String = "VB.NET" Select Case Nome Case "VB.NET" MessageBox.Show("Certo!") Case "C#" MessageBox.Show("Errado!") Case Else MessageBox.Show("?") End Select

string Nome = "C#";

18
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

switch (Nome){ case "VB.NET": MessageBox.Show("Certo!"); break; case "C#": MessageBox.Show("Errado!"); break; default: MessageBox.Show("?"); break; }

Note que no C# devemos usar a palavra break para quebrar o fluxo Laos Vamos estudar trs estruturas de laos: For, while e laos em colees. O lao for tem a sintaxe semelhante em qualquer linguagem:
Dim i As Integer For i = 1 To 10 MessageBox.Show(CStr(i)) Next i

for (int i = 0; i < 10; i++) MessageBox.Show(Convert.ToString(i));

A sintaxe do C# nos permite facilmente fazer um loop regressivo, basta alterarmos o ltimo argumento de i++ para i--, e obviamente mudarmos a condio:

for (int i = 0; i < 10; i++) MessageBox.Show(Convert.ToString(i));

No VB.NET podemos conseguir o mesmo efeito utilizando a palavra chave Step:

Dim i As Integer = 0 For i = 10 To 1 Step -1 MessageBox.Show(CStr(i)) Next i

Existem laos While com teste de condio no inicio da sentena ou no final, neste ltimo o lao executa sempre uma primeira vez, independente do resultado da avaliao. Vamos ver exemplos do primeiro caso:

19
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Dim i As Integer = 0 Do While i < 5 MessageBox.Show(CStr(i)) i += 1 Loop

int i = 0; while (i<5) { MessageBox.Show(Convert.ToString(i)); i += 1; }

Finalmente, o que pode ser novidade para quem ainda no conhece a plataforma .NET so os laos em colees, que permitem percorrer um a um os membros de uma coleo qualquer.

Dim numbers() = {4, 5, 6, 1, 2, 3, -2, -1, 0} Dim i As Integer For Each i In numbers MessageBox.Show(Convert.ToString(i)) Next

int[] numbers = { 4, 5, 6, 1, 2, 3, -2, -1, 0 }; foreach (int i in numbers) { MessageBox.Show(Convert.ToString(i)); }

Neste exemplo a titulo de simplicidade nossa coleo um array, porm a estrutura funciona da mesma forma para qualquer tipo de coleo. Convertendo valores Para a converso entre tipos de dados utilize a classe convert, seguida do mtodo apropriado ao tipo que ser converter:

Dim i As Integer, s As String s = Convert.ToString(i)

int i; string s; s = Convert.ToString(i);

20
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Procedimentos e funes Em VB.NET uma funo comea com a palavra reservada function e termina com o tipo do dado de retorno. J no C# inicia com o tipo do dado de retorno:

Function Somar( x As Integer, y As Integer) _ As Integer Dim z As Integer z = x + y Return z End Function

int Somar(int x, int y) { int z; z = x + y; return z; }

O retorno inidicado pela palavra-chave return ou pelo prprio nome da funo.

Um procedimento que no retorna valor em VB.NET inicia com a palavra chave Sub, e em C# com void:

Sub Somar( x As Integer, y As Integer) _ As Integer Dim z As Integer z = x + y End Function

void Somar(int x, int y) { int z; z = x + y; }

A passagem de parametros por padro ocorre por valor. Para indicar um parametro a ser passado por referencia, utilize ByRef no VB.BET e ref no C#.

Visibilidade ou Scopo

21
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

A visibilidade de um procedimento, classe, inferface etc. definada atravs das palavras reservadas a seguir: Public / public: acessvel de qualquer lugar do projeto ou de instancias da classe Private / private: Acessvel apenas dentro do mesmo contexto; Friend / internal: Acessivel apenas dentro do projeto; Protected / protected: Acessivel apenas dentro da classe ou de uma classe derivada; Protected Friend / Protected Internal: Acessivel apenas dentro da classe derivada ou do mesmo projeto;

Ao declarar algo sem a visibilidade, por padro ser private. Tratamento de excees O tratamento de excees ser surpresa apenas para quem esta comeando agora a conhecer o VB.NET, que com o lanamento do linguagem ganhou uma forma estruturada de tratamento de erro semelhante as demais linguagens OO. o adeus ao On error go to.

O tratamento de erro formando por uma estrutura Try...Catch..Finally. Entre o Try e o Catch deve ser colocado o cdigo que voc quer proteger de uma exceo. Entre Catch e Finnally o cdigo a ser executado no caso de ocorrer uma exceo, e finalmente aps Finnally algum cdigo que voc queira que obrigatriamente seja executado, ocorrendo ou no uma exceo, geralmente usado para liberar algum recurso alocado. Vale lembrar que voc pode usar apenas parte da funcionalidade do bloco, por exemplo, se voc que apenas tratar uma exceo, pode contruir um bloco contendo apenas os comando try...catch. Por outro lado se voc quer apenas garantir que um recurso seja liberado, como uma conexo com o banco de dados pro exemplo, voc pode fazer uso apenas do bloco try...finally.

Outra caracteristica importante que as classes de exceo so executadas da mais especifica para a menos especifica, isto permite um tratamento de erros mais robusto e eficaz. Normalmente voc deve terminar seu tratamento com a classe Exception, que menos especfica e que da origem a todas as demais. 22
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Try My.Computer.FileSystem.CopyFile("Aspnet.pdf", "Aspnet.bkp") Catch ex As System.IO.IOException MessageBox.Show("Ocorreu um erro na cpia do arquivo") Catch ex2 As Exception MessageBox.Show("Ocorreu um Erro desconhecido") End Try

try { string s = null; } catch (ArgumentNullException s) { MessageBox.Show("Ocorreu um erro na string"); } catch (Exception r) { MessageBox.Show("Ocorreu um Erro desconhecido"); }

With O with, que no tem equivalente no C#, permite omitir o nome de um objeto quando o mesmo utilizado em diversas linhas.

With GridView1 .Caption = "GridView" .EditIndex = 0 .Enabled = False End With

Orientao a Objetos Vamos tambm apresentar alguns aspectos da sintaxe da criao de classes no VB.NET e no C#. Porm antes preciso conhecer o conceito de NameSpaces.

NameSpaces uma estrutura simples, porm muito eficiente de organizar seu cdigo. Por exemplo, uma suposta empresa GoodSoftware pode definir que todas suas classes tero como NameSpace raiz GoodSoftware. Abaixo deste existiro os NameSpaces ERP, CRM e Global. O NameSpace ERP abrigaria as classes de seus novo sistema ERP, o CRM idem, e o Global classes que para serem utilizadas em ambos os projetos. Dentro de cada um destes NameSpaces possvel criar n outros. Outra importante

23
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

vantagem do seu uso reduo de problemas com conflitos com nomes repetidos de classes ou mtodos.

Abaixo vemos a declarao bsica de uma classe de Nome Class1, dentro de um NameSpace

Namespace GoodSoftware Public Class ERP '... End Class End Namespace

namespace GoodSoftware { public class ERP { // } }

Voc no obrigado a criar uma classe dentro de um NameSpace. No preciso existir relao entre nomes de classes e namespaces com o nome fisico do arquivo. Voc pode inclusive colocar diversas classes ou namespaces dentro de um mesmo arquivo. Um construtor de uma classe em VB.NET se define com a palavra chave New, j em C# deve ter no mome da classe

Public Sub New() ... End Sub

public Class1 () { // }

Obviamente que voc pode criar um construtor com passagem de parametros.

J as propriedades so bastante singular em cada linguagem:

24
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Public Property Nome() As String Get Return Pnome End Get Set(ByVal value As String) Pnome = value End Set End Property

public String Nome { get { return Pnome; } set { Pnome = value; } }

Uma propridade pode ser apenas leitura ou apenas escrita. Alm de inicar estas caracteristica na declarao da propriedade, voc dever omitir as sentenas get e set, respectivamente. Caso voc deseje criar um mtodo que por algum motivo no precise ou no deva ter sua classe instanciada, basta voc acrescentar a palavra chave shared no VB.NET ou static no C#, sempre aps a declarao de visibilidade do mtodo:

Public Shared Function Somar(ByVal x As Integer, ByVal y As Integer) _ As Integer Dim z As Integer z = x + y Return z End Function

public static int Somar(int x, int y) { int z; z = x + y; return z; }

Lembre-se que um mtodo definido com shared / static, no pode usar qualquer recurso da classe, como por exemplo uma variavel privada ou mesmo, uma propriedade ou um outro mtodo. A herana de uma classe definida pela palavra chave inherits em VB.NET e em C# atravs da notao : classe pai

Public Class Class2 Inherits Class1 End Class

25
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

class Class2: Class1 { }

Para se referir a classe base, utilize MyBase no VB.NET ou base no C#, seguido do nome do mtodo ou propriedade. Abaixo alguns outros recursos de OO do .NET, no vou demonstrar exemplos porque extrapolam o objetivo bsico desta sesso. A primeira palavra a notao em VB.NET e a segunda em C#:

NotInheritable / sealed: Tambm conhecido com Classe Fechada , indica que uma classe no pode ser usada como base, ou seja, nenhuma outra classe poder herd-la MustInherit / abstract: Define uma classe abstrato, onde apenas uma classe filho poder ser instanciada. Overloads: permite que um mtodo seja sobrecarregado, ou seja, que possa haver mtodos com a mesma funo, porm com assinaturas diferentes. O uso do termo desnecessrio tanto em VB.NET quanto em C#, pois o ambiente entende que mtodos com o mesmo nome porem com assinaturas diferentes esto sobrecarregados. Overridable / virtual: Indica que uma classe filho deve programar uma nova verso do mtodo. Overrides / override: Utilizado para sobrescrever uma implementao na classe pai. MustOverride: Em uma classe marcada como MustInherit. Indica que o mtodo ou propriedade deve no foi implementado na classe pai e deve ser implementado na classe derivada. Interfaces Interfaces um recurso que permite criar uma padronizao maior entre classe. Uma interface uma assinatura , que compreende nada mais que mtodos e propriedades ocas . Uma classe que programe determinada interface deve obrigatoriamente seguir essa assinatura. Voc pode definir que determinada classe implemente determinada interface para ter uma certa funcionalidade. 26
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Confuso? Vou citar um exemplo: voc pode conectar tanto um array quanto um SqlDataSource a um GridView, pois ambos implementam a interface

System.Collections.IEnumerable.

Interface Interface1 Sub Metodo1() Function Metodo2() As Integer End Interface Public Class UsaInterface Implements Interface1 Public Sub Metodo1() Implements Interface1.Metodo1 ' End Sub Public Function Metodo2() As Integer Implements Interface1.Metodo2 ' End Function End Class

public interface Interface1 { void Metodo1(); int Metodo2(); } public class UsaInterface : Interface1 { public void Metodo1() { // } public int Metodo2() { // } }

Como um ambiente de alta produtividade, O VS vai criar automaticamente pra voc todas as estruturas que precisam ser implementadas na classe, no momento que voc informar que deseja utilzar determinada interface. O .NET no suporta herana multipla, porm uma classe pode implementar diversas interfaces.

Utilizando o IIS Certifique-se que o IIS esta devidamente instaldo e rodando.

27
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Ao contrario do seu entecessor, o VS 2005 e 2008 vem com um pequeno servidor Web embutido. Porm devido as limitaes deste, vamos trabalhar com IIS. Para criar uma nova aplicao usando o IIS siga os seguintes passos:

Na IDE do VS selecione File / New Web Site; Na caixa de dialogo New Web Site selecione ASP.NET Web Site;

Clique em Browse; Na caixa de dialogo Chose Location, selecione Local IIS; Selecione Site da Web Padro; Clique em Create New Web Aplication; Digite um nome para sua aplicao, no exemplo Teste;

28
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Clique em Open; De volta a new Web Site, clique em Ok.;

29
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

3. Web Forms
Um Web Form uma pagina de sua aplicao. Na IDE do VS ele se comporta de forma semelhante a um Windows Form: Uma rea onde voc pode arrastar e soltar controles visuais, codificar eventos e configurar propriedades que vo regrar seu comportamento. Fisicamente, um Web Form composto por um arquivo com extenso aspx e, dependendo do modelo adotado, poder ou no estar vinculado a ele um arquivo vb ou cs, com a codificao para execuo no servidor.

Abaixo voc v o cdigo gerado pelo prprio VS na criao da um Web Form:


<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default2.aspx.vb" Inherits="Default2" %> <!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>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> </div> </form> </body> </html>

Nesta pgina voc alguns dos principais elementos que formam uma pagina HTML padro, como as tags Html, Head, Body, Form e Title. Todos controles e todo contedo de apresentao de seu formulrio, vai estar entre as Tags Body. Diretivas Na primeira linha da pgina temos uma diretiva de pgina. Uma diretiva representada pelo smbolo <%@. O que nos diz que se trata de uma diretiva de pgina palavra page, logo aps a abertura da tag. Uma diretiva de pgina possuiu algumas informaes que sero teis ao compilador no momento da gerao da pagina. No cdigo acima, vemos que na diretiva criada por padro pelo VS, temos j diversos atributos, voc pode alter-las ou mesmo inserir diretivas especificas, desde obviamente que voc saiba o que esta fazendo. 30
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Abaixo veremos as principais diretivas existentes no ASP.NET 3.5: @Control: Diretiva de um User Control (arquivo ascx) @Master: Diretiva de uma Mster Page @OutPutCache: Diretiva de controle de cach @Assembly: Vincula um assembly a pgina @Import: Importa um namespace especificado @Page: Diretiva de um Web Form (arquivo aspx Cada diretiva pode conter n atributos. Os atributos so configuraes que na verdade ditam as funcionalidades da diretiva. Veremos a seguir os principais atributos da diretiva @page: AutoEventWireUp: Determina que os eventos de uma pgina sejam disparados automaticamente ClassName: Especifica o nome da classe relacionada a pgina CodeFile: Especifica o arquivo code-behind da pgina Culture: Especifica as configuraes de cultura da pgina Debug: Compila a pgina com os smbolos de depurao EnableSessionState: Indica se permitido armazenamento de sesso na pgina EnableTheming: indica se permitido o uso de temas na pgina EnableViewState:Indica se o viewstate ser mantido na pgina Language: Defina a linguagem em que a pgina codificada SmartNavigation: Habilita os recursos do SmartNavigation na pgina Theme: Defini um tema especifico para a pagina ValidateRequest: Indica se a requisio ser validada. Quando este atributo esta com verdadeiro, se existir algum contedo potencialmente perigoso postado na pgina, ser gerada uma exceo.

No arquivo web.config ou mesmo at no machine.config, podemos configurar muitos dos atributos que tambm so configurveis a nvel de pagina. Normalmente a configurao atravs de diretiva de pgina sobrescreve a definida em um arquivo de configurao. 31
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

32
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

4. Controles
Em seo posterior veremos os novos controles adicionados no ASP.NET 3.5, que como vimos na seo de novidades desta verso, so poucos.

No ASP.NET 2.0 foram adicionados de cerca de 50 novos controles de servidor. Alguns presentes na verso 1.x, como o DataGrid, no esto mais disponveis na caixa de ferramentas, porm podem ser facilmente adicionados.

No estudaremos detalhadamente todos os Server Controls. Voc pode criar uma aplicao utilizando basicamente dois grandes grupos de controles: controles HTML, que so os controles padro conhecidos e Server Controls, ou controles de servidor. Voc pode criar aplicativos usando apenas controles HTML, porm tenha um bom motivo para fazer isto. Server Controls so controles ricos em funcionalidade, que podem ter seus eventos ou propriedades manipulados no cdigo executado no servidor. Todo controle de servidor codificado atravs de uma tag ASP, que no HTML padro que conhecemos. Em tempo de execuo, o ASP.NET renderiza esta tag em HTML otimizado para o navegador em que a aplicao executada.

Por exemplo, um dos controles mais simples o Label. Ao colocar um Label em um WebForm o VS gera o seguinte cdigo:
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

Voc pode gerenciar a apresentao de seu site manualmente, se preferir. Ao executarmos a aplicao, a tag ASP:Label renderizado em uma tag span: <span id="Label1">Label</span>

33
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

O atributo runat=Server no define que o controle um controle de servidor, mas sim que ele ser visvel no cdigo executado no servidor. Isto significa que se adicionarmos este atributo a um controle HTML, este tambm poder ser manipulado no servidor, porm de forma mais pobre:
<input id="Text1" runat="server" type="text" />

No estudaremos controles HTML. Acessando eventos e propriedades de controles

Na caixa de propriedades, clicando no boto Events

, voc tem uma relao de todos

os eventos possveis para um determinado controle. Para que o VS crie automaticamente um manipulador para o evento basta dar um duplo clique no nome. Alguns manipuladores podem ser criados quando clicamos sobre o prprio controle, como o evento Click de um Button:

Protected Sub Button1_Click(ByVal sender As Object,ByVal e _ As System.EventArgs) Handles Button1.Click End Sub

protected void Button1_Click(object sender, EventArgs e) { }

Junto com o evento so passadas duas propriedades, sender, do tipo object, que contem o objeto que disparou o evento, e e, propriedades especificas do evento. do tipo EventArgs, que contem algumas

Ler ou alterar propriedades de um controle feito no modelo controle.propriedade, como nos exemplos abaixo:

Protected Sub Button1_Click(ByVal sender As Object, ByVal e _ As System.EventArgs) Handles Button1.Click Button1.Text = "Gravar" Button1.ToolTip = "Clique Aqui para Gravar" End Sub

34
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

protected void Button2_Click(object sender, EventArgs e) { Button1.Text = "Gravar"; Button1.ToolTip = "Clique Aqui para Gravar"; }

Voc pode definir que mais de um controle dispare um mesmo manipulador de evento, internamente basta voc verificar qual foi o controle que causou o evento. De uma maneira geral, para ambas as linguagens, basta voc selecionar o evento no dropdown na caixa de propriedades. O interessante como o VS trata isto em tempo de design de forma to diferenciada. No C# o nome do manipulador do evento colocada no arquivo ASPX, no atributo OnClick. No VB.NET, adicionado o nome do controle ao grupo handles, ao final da assinatura do evento. O resultado em tempo de execuo obviamente o mesmo. Propriedades Comuns Algumas propriedades so comuns, se no a todos, mas a maioria dos controles. Vamos v-las agora: ID: O nome do controle, deve ser nico BackColor: Cor de fundo do controle BorderColor: Cor de Borda do Controle BorderStyle: Estilo da borda do Controle BorderWidt: Largura da borda do controle CssClass: Indica a classe CSS a ser aplicada no controle Enabled: indica se o controle esta habilitado EnableTheming: Indica se o tema do controle estar ativo EnableViewState: Indica se o controle vai armazenar seu estado no viewstate da pagina Font: Fonte do controle SkinID: Indica o ID do skin a ser utilizado. Skins sero estudados mais adiante Text: Representa o texto que ser exibido ao usurio da aplicao ToolTip: a dica que ser exibida ao usurio quando este posicionar o mouse sobre o controle. 35
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Uso de HotKeys Duas propriedades novas e interessantes, que esto presentes em alguns controles, so AcessKey e AssociatedControlID. Com a primeira definimos uma tecla de atalho para o controle, que no navegador e acionado junto com a tecla ALT. J com AssociatedControlID podemos definir qual o controle vai receber o foco no caso da combinao de teclas ser acionadas. Este recurso conhecido como HotKeys.

Vamos estudar agora os trs principais controles de servidor, que formam um conjunto bsico para a criao de qualquer aplicativo. Label Um controle simples, porm poderoso, que nos permite exibir algum texto em uma pgina Web. Todas suas propriedades podem ser manipuladas no cdigo gerado no servidor. Alguns exemplos de codificao de controles, mostram primeiro em tempo de design (ASP) e em seguida em tempo de execuo (HTML) . definido pela a tag ASP:Label e quando executado renderizado em uma tag span:
<asp:Label ID="Label1" runat="server" Text="ASP.NET 3.5 Rules!!"></asp:Label> span id="Label1">ASP.NET 3.5 Rules!!</span>

TextBox O textbox um controle de edio simples. Atravs da propriedade TextMode podemos utiliz-lo ainda para receber senhas ou mesmo transforma-lo em um controle com mltiplas linhas. Uma novidade a propriedade AutoCompleteType, que pode receber apenas valores pr-definidos. Ao preencher um segundo controle com o mesmo valor para esta propriedade, o navegador dever sugerir o preenchimento do valor informado no primeiro campo.

definido pela a tag ASP:TextBox e quando executado renderizado em uma tag input do tipo text ou password ou ento textarea, de acordo com a propriedade textmode.

36
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

<asp:TextBox ID="TextBox1" runat="server">Normal</asp:TextBox> <asp:TextBox ID="TextBox2" runat="server" TextMode="Password">Senha</asp:TextBox> <asp:TextBox ID="TextBox3" runat="server" TextMode="MultiLine">MultiLine</asp:TextBox> <input name="TextBox1" type="text" value="Normal" id="TextBox1" /> <input name="TextBox2" type="password" id="TextBox2" /> <textarea name="TextBox3" rows="2" cols="20" id="TextBox3">MultiLine</textarea>

Button O button um boto de comando bsico. Sua principal funo causar um post back para a execuo de algum cdigo no servidor. O principal evento Click, que, obviamente, disparando quando clicamos no boto. renderizado em uma tag input do tipo submit.
<asp:Button ID="Button1" runat="server" Text="Button" /> <input type="submit" name="Button1" value="Button" id="Button1" />

Uma importante propriedade a PostBackUrl, que indica para qual pgina ser executado o post back.

Para exemplificar, o cdigo abaixo l a um TextBox de um formulrio que originou o PostBack:

Dim Nome As String = CType(PreviousPage.FindControl("Nome"), _ TextBox).Text

LinkButton O controle linkbutton uma mistura de boto de comando com HyperLink. Sua aparncia de um Link, seu comportamento e suas propriedades o assemelham a um Button. No existe propriedade NavigateUrl, o redirecionamento deve ser codificado no post back ou atravs da propriedade PostBackUrl.
<asp:LinkButton ID="LinkButton1" runat="server">LinkButton</asp:LinkButton>

Nos bastidores, o LinkButton renderiza uma tag a, cujo atributo Href, ao invs de conter uma URL, dispara uma funo Java Script gerada pelo ASP.NET. 37
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

<a href="javascript:__doPostBack('LinkButton1','')">LinkButton</a> ImageButton

id="LinkButton1"

Um ImageButton um boto de comando onde podemos adicionar uma imagem para exibio. Possui todas as funcionalidades do Button, mais a propriedade ImageURL onde definimos a imagem. Em tempo de execuo renderizado como Input do tipo Image.
<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="web.gif" /> <input type="image" name="ImageButton1" id="ImageButton1" src="web.gif" />

HyperLInk O hyperlink permite criar links de navegao, sua propriedade mais importante NavagateURL, que valor para a atribuo HREF. um controle simples que renderizado com uma tag a. Seu poder maior esta na possibilidade de, por exemplo, definir a URL dinamicamente no cdigo do servidor. Atravs de uso de HotKey pode-se ainda facilitar a navegao na pagina. A propriedade text define o texto de exibio, j ImageUrl pode definir uma imagem a ser exibida ao invs do texto.
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="http:\\www.fernandoamaral.com.br">Clique Aqui</asp:HyperLink> <a id="HyperLink1" href="http:\\www.fernandoamaral.com.br">Clique Aqui</a>

CheckBox O checkbox gera um controle HTML input do tipo checkbox


<asp:CheckBox ID="CheckBox1" runat="server" Text="Lembrar" /> <input id="CheckBox1" type="checkbox" name="CheckBox1" />

38
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

RadioButton O RadioButton gera um controle HTML input do tipo radio


<asp:RadioButton ID="RadioButton1" runat="server" Text="Lembrar" /> <input id="RadioButton1" type="radio" name="RadioButton1" value="RadioButton1" />

Image O controle Image deve ser utilizado para exibio de Imagens. A imagem a ser exibida deve ser definida atravs da propriedade ImageUrl.
<asp:Image ID="Image1" runat="server" ImageUrl="web.gif" /> <img id="Image1" src="web.gif" />

DropDownList e ListBox O DropDownList e ListBox so controles altamente poderoso. Suas propriedades e eventos trazem recursos que s poderiam ser obtidos com muita mo de obra em uma aplicao WEB. A propriedade AutoPostBack, causa um post back automtico ao servidor quando um valor selecionado. Os controles podem ter seus itens adicionados em tempo de design ou de execuo, atravs da propriedade Itens. Tambm possvel vincul-lo a uma fonte de dados qualquer, que pode ser um array, um dataset ou mesmo um SqlDataSource, s para citar alguns. Para cada item possvel ler e escrever um texto e um valor, armazenados nas propriedades text e value, respectivamente. Isto muito til, por exemplo, para recuperar o cdigo de um item selecionado pelo usurio.
<asp:DropDownList ID="DropDownList1" runat="server"> <select name="DropDownList1" id="DropDownList1">

O exemplo abaixo adiciona um item a um DropDownList:

DropDownList1.Items.Add("Selecione uma opo")

39
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

DropDownList1.Items.Add("Selecione uma opo");

Para recuperar o valor da propriedade text bem como value basta ler as propriedades especficas:

Dim s As String = DropDownList1.SelectedValue

Dim t As String = DropDownList1.SelectedItem.Text

string s = DropDownList1.SelectedValue;

string t = DropDownList1.SelectedItem.Text; O evento SelectedIndexChange executado quando um item do controle selecionado. Se a propriedade AutoPostBack estiver marcada como verdadeira, um postback executado imediatamente, caso contrrio o evento s ser executado no prximo postback. Existem ainda diversos mtodos interessantes, como itens.clear, que limpa os itens, e propriedades, como itens.count, que retorna o nmero de itens no controle. CheckBoxList e RadioButtonList Os controles CheckBoxList e RadioButtonList em tempo de design so apresentados como um conjunto de controles CheckBox e RadioButton, que podem ter suas propriedades gerenciadas mais facilmente e conectados a uma fonte de dados qualquer. Em tempo de execuo, o ASP.NET renderiza cada controle como diversos controles input do tipo checkbox ou radiobutton. No exemplo abaixo o cdigo verifica se um determinado item de um

If CheckBoxList1.Items(0).Selected = True Then '' End If

if (CheckBoxList1.Items[0].Selected==true) { // }

40
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Calendar O Calendar um calendrio que renderizado utilizando uma tag table, e na sua forma mais simples tem pelo menos 7 KB de texto. excelente para exibio e entrada de datas. Possuiu um conjunto poderosssimo de propriedades, mtodos e eventos que permitem praticamente exibi-lo de qualquer forma imaginada. Entre seus eventos mais significativos, temos o SelectionChange, que disparado quando ocorre uma alterao na seleo do calendrio, e VisibleMonthChange, que ocorre quando o ms visvel no calendrio alterado. A propriedade SelecteDate nos permite ler a data selecionada. No exemplo abaixo um label exibe a data selecionada pelo usurio:

Protected Sub Calendar1_SelectionChanged(ByVal sender As _ Object, ByVal e As System.EventArgs) Handles _ Calendar1.SelectionChanged Lbldata.Text = String.Format("A data selecionada {0:d}",_ Calendar1.SelectedDate) End Sub

protected void Calendar1_SelectionChanged(object sender, EventArgs e) { Lbldata.Text = String.Format("A data selecionada {0:d}", Calendar1.SelectedDate); }

Atravs das propriedades SelectionMode podemos definir se o usurio poder selecionar um nico dia, uma semana, um ms inteiro ou nada. Caso ele possa selecionar, por exemplo, uma semana, podemos recuperar os dias selecionados atravs de um lao for each, que percorre a coleo de objetos DateTime da propriedade SelectedDates:

Dim s As System.DateTime For Each s In Calendar1.SelectedDates ListBox1.Items.Add(String.Format("Data Selecionada {0:d}", s)) Next

41
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

foreach (System.DateTime s in Calendar1.SelectedDates) { ListBox1.Items.Add(String.Format("Data Selecionada {0:d}", s)); }

AdRotator O AdRotator nos permite incluir um banner em nosso site, onde o prprio ASP.NET atravs de um arquivo de configurao, vai cuidar da rotatividade das exibies de imagens. O segredo todo est em um arquivo de configurao, que pode ser um XML ou mesmo uma tabela de banco de dados. Para testar este controle, crie um arquivo XML dentro do diretrio App_Data de sua aplicao (se no existir o diretrio, crie-o tambm), com o seguinte texto:

<?xml version="1.0" encoding="utf-8" ?> <Advertisements> <Ad> <ImageUrl>~/imagens/cafezinho.bmp</ImageUrl> <NavigateUrl>http://www.cafezinho.com</NavigateUrl> <AlternateText>Caf</AlternateText> <Keyword>Caf</Keyword> <Impressions>40</Impressions> </Ad> <Ad> <ImageUrl>~/imagens/deserto.bmp</ImageUrl> <NavigateUrl>http://www.deserto.com</NavigateUrl> <AlternateText>Deserto</AlternateText> <Keyword>Site Deserto</Keyword> <Impressions>20</Impressions> </Ad> </Advertisements>

Certifique-se que voc tem uma pasta imagens com as imagens informadas. Voc pode configurar os parmetros de acordo com sua preferncia: NavigateUrl a URL para qual o usurio ser direcionado quando clicar no banner, AlternateText o texto a ser exibido no local da imagem. Impressions representa o nmero de impresses do banner. No exemplo acima, note que o primeiro banner dever aparecer em dobro. Para vincular o seu AdRotator ao arquivo XML basta inform-lo na propriedade AdvertisementFile.

Um arquivo XML sensvel a caracteres maisculos e minsculos. 42


ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

View e MultiView Mais uma novidade surgida no ASP.NET 2.0. Provavelmente voc j necessitou que parte de sua aplicao ficasse invisvel em determinados momentos. Claro que isso no era uma tarefa impossvel, mas com os controles MultiView e View isto ficou mais simples.

A idia : Dentro de um Multiview voc agrega um ou mais Views. Em cada um dos Views voc coloca controles conforme a necessidade. A partir da s determinar qual View estar visvel atravs da propriedade ActiveViewIndex.

MultiView1.ActiveViewIndex = 0

MultiView1.ActiveViewIndex = 0;

Wizard Continuando com as novidades, o Wizard um assistente para pginas Web, onde voc pode determinar passos (Steps). Em cada Step voc tem uma rea onde pode colocar seus controles conforme a necessidade.

Entre os eventos tempos NextButtonClick, que disparado sempre que o usurios clicar no boto Next, FinishButtonClick, disparado no encerramento, e CancelButtonClick, disparado ao final.

O mais interessante de tudo que Wizard mantm estado de tudo o que colocado em seus passos. Isto significa que voc pode fazer o processamento dos dados ao final do assistente.

O controle totalmente configurvel, desde aparncias at texto dos botes. Controles de validao 43
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

O ASP.NET desde sua primeira verso tem integrador alguns controles que permitem validar entradas do usurio, tanto no cliente como no servidor, de forma simples e rpida.

A partir da verso 2.0 foi inclua a propriedade ValidationGroup, que permite que agrupemos grupos diferentes de validao em um mesmo WebForm. Na verso anterior isto era um problema, ou fazamos a validao manualmente ou dividamos a nossa lgica de negocio em dois formulrios diferentes. Na verso 3.5 no houveram novidades em relao aos controles de validao.

Os controles de validao so: RequiredFieldValidator: Permite validar se um controle foi preenchido. RangeValidator: Permite verificar se o valor informado esta entre determinado intervalo. RegularExpressionValidator: Permite validar o valor informado com uma expresso regular CompareValidator: Permite comparar dois valores. CustomValidator: Permite que customizemos nossa expresso de validao.

Um controle de validao vai exibir uma mensagem caso a validao falhe. Com o controle ValidationSummary podemos agrupar as mensagens de todos os controles em um nico local ou numa mesma caixa de dialogo. Se voc quer garantir que um controle tenha um valor preenchido e seja, por exemplo, um inteiro maior que zero, voc ter que usar alm de um RangeValidator um RequiredFiledValidador, apenas este ltimo obriga o preenchimento do valor. Um controle de validao tem duas propriedades para exibio de mensagens: Text e ErrorMessage. Se voc utilizar um ValidationSummary voc pode trabalhar com as duas: A mensagem em ErrorMessage ser exibida no ValidationSummay, e text no proprio controle de validao (um * por exemplo).

44
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Para criar grupos de validao, basta escolher um nome para o grupo e preencher as propriedades ValidationGroup tanto dos controles a serem validados quanto dos controles de validao.

Se voc quiser causar um post back sem disparar os validadores, basta setar a propriedade CausesValidation do controle para False. Para obrigar o preenchimento de um textbox: Coloque num formulrio um controle TextBox, um RequiredFieldValidator e um ValidationSummary e um Button; Configure a propriedade ControlToValidade do RequiredFieldValidator para o TextBox adicionado no furmaulario; Preencha a propriedade text do RequiredFieldValidator para *, e ErrorMessage para Preenchimento Obrigatrio ; Configure a propriedade ShowMessageBox do ValidationSummary para true, e ShowSummary para false; Rode a aplicao; Clique no boto sem preencher qualquer informao no textbox.

45
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Por fim, para verificar tambm no servidor se todas as validaes foram feitas, verifique a propriedade isvalid da pgina.

5. Master Pages
comum em aplicaes convencionais ou mesmo Web a necessidades de criarmos partes de contedo que sero exibidas em todas ou pelo menos em diversas pginas. No ASP clssico isso era resolvido da seguinte forma: Voc desenvolvia o contedo separadamente e sua incluso era feito onde necessrio atravs de uma tag Include.

No ASP.NET 1.1 surgiu uma novidade: os chamados Web User Controls, que so arquivos com a extenso ascx, que podiam ser programados na IDE do Visual Studio e adicionados a qualquer Web Form. Trouxe significativas vantagens em relao ao uso 46
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

do include, como o fato da pagina host ter a possibilidade de ler ou alterar valores de controles ou propriedades.

Sua grande desvantagem era que no possua herana visual como j h um longo tempo era possvel em aplicaes convencionais: O user control em tempo de design eram representados na IDE do VS como um boto cinza.

No ASP.NET 2.0 uma das grandes novidades apresentadas e que obviamente continuam disponveis na verso 3.5 so as Master Pages, que trazem finalmente a herana de contedo de forma visual.

Uma MasterPage um arquivo com extenso master. Pode ser criada no IDE do VS no modelo code-behing ou code-inline, assim como um Web Form. Sua estrutura bsica tambm muito parecida com um Web Form:
<%@ Master Language="VB" CodeFile="Master.master.vb" Inherits="Master" %> <!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>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <asp:contentplaceholder id="ContentPlaceHolder1" runat="server"> </asp:contentplaceholder> </div> </form> </body> </html>

A principal diferena a diretiva de compilao @Master, no lugar de @Page. Esta diretiva informa ao ASP.NET durante o processo de compilao que trata-se uma Master Page.

Uma pgina aspx que utiliza uma Master Page chamada de pgina de contedo (Content Page). Uma pgina de contedo no contem os elementos que formam uma pgina HTML comum, pois estes sero herdados da Master Page. Numa Master Page, 47
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

as reas onde uma pagina de contedo tero disponvel para exibir seu contedo so definidas atravs de controles de servidor contentplaceholder. No cdigo acima voc pode ver um controle contentplaceholder criado por padro na criao da MasterPage. Criando uma Master page Criar uma Master Page no Visual Studio simples: Na caixa de dialogo Add New Item Selecione Master Page, defina um nome para a pgina. O VS cria a MasterPage com o nome escolhido.

Se voc optou pelo modelo code-behind, sero criados dois arquivos: um arquivo master e um vb ou cs, conforme a linguagem escolhida. Se a opo foi code-inline, ser criado apenas o arquivo .master. Utilizando uma Mater Page Definir a(s) pgina(s) de contedo simples e pode ser feito quatro maneiras diferentes:

Durante a criao da pgina, na caixa de dialogo Add New Item, marque a opo Select Master Page

48
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Ser exibida a caixa de dialogo Master Page, que exibe as Master Pages disponveis no projeto:

Baste selecionar a pgina Master e clicar em Ok.

A segunda atravs da prpria pagina Master, selecionando a opo Add Content Page. Ser criada uma pgina de contedo em branco. Voc no poder escolher o nome da pgina no momento da sua criao.

A terceira de forma manual. Crie um Web Form normalmente, remova todo o HTML gerado, com exceo da diretiva de pgina. Adicione a diretiva de pgina o atributo MasterPageFile, que indica que esta uma pgina de contedo que utiliza a Master Page especificada no atributo.

Finalmente, a quarta e ltima, e em tempo de execuo:

49
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Protected Sub Page_PreInit(ByVal sender As Object, ByVal e _ As System.EventArgs) Handles Me.PreInit Page.MasterPageFile = "~/MasterUm.master" End Sub

protected void Page_PreInit(object sender, EventArgs e) { Page.MasterPageFile = "~/MasterUm.master"; }

A defninio de uma pagina Master em tempo de execuo deve ser feito no evento PreInit da pgina.

Obviamente que esta ltima forma nos priva dos beneficios da herana visual.

Trabalhando com uma Master Page Este no um curso de Web Design, portanto no perca tempo ou se preocupe com a aparncia de suas atividades prticas. Nesta sesso vamos demonstrar de maneira prtica como tirar proveito da utilizao de uma Master Page. Crie uma nova aplicao ASP.NET; Crie uma nova Master Page; Defina o layout da Master Page de acordo com a figura abaixo:

50
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Para os quatro controles da esquerda, que devero funcionar como HyperLinks, utilize controles de Servidor HyperLinks, defina a propriedade text de cada um como Desentupimento, Hidrulica, Limpeza e Hidrojateamento. A propriedade NavigateUrl de cada um deve ser definida pelo mesmo contedo da propriedade text mais a exteso aspx, por exemplo: Desentupimento.aspx.

Crie quatro pginas de contedo com os nomes especificados nas propriedades NavigateUrl acima, especificando como Master Page a pgina criada.

Defina um contedo especifico para cada pgina de contedo, conforme exemplo abaixo: Na rea Content da pgina de contedo voc pode trabalhar livremente: adicionar controles, eventos etc.

51
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Defina uma das pginas de contedo criada como pgina inicial e rode a aplicao.

Navega entre as pginas e veja na prtica o funcionamento da aplicao.

Acessando a pgina Master da pgina de contedo

Voc pode facilmente acessar qualquer controle ou propriedade da pgina Master, na pgina de contedo, atravs da propriedade Master.

Por exemplo, para ler o contedo de um dos HyperLinks da pgina Master:

If Not Page.IsPostBack Then Dim s As String = CType(Master.FindControl _ ("Desentupimento"), HyperLink).Text End If

if (!Page.IsPostBack) { string s = (Master.FindControl("Desentupimento") as HyperLink).Text; }

52
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Tambm podemos alterar o texto ou mesmo qualquer propriedade do controle na Master Page, pois nossa operao por referencia:

Dim Hyper As HyperLink Hyper = CType(Master.FindControl("Desentupimento"), HyperLink) Hyper.ForeColor = System.Drawing.Color.Red

HyperLink Hyper; Hyper = (Master.FindControl("Desentupimento") as HyperLink); Hyper.ForeColor = System.Drawing.Color.Red;

Neste exemplo, estamos mudando a cor do HyperLink do contedo da pgina Master para vermelho.

Alterando o Ttulo das pginas de contedo

A pgina de contedo deve conter um atributo title, onde deve ser definido o titulo para exibio da pgina. Na ausncia deste, ser exibido o titulo da Master Page.

Outra alternativa definir no cdigo o ttulo para a pgina:

Master.Page.Title = "Titulo definido em tempo de execuo"

Master.Page.Title = "Titulo definido em tempo de execuo";

Trabalhando com contedo padro Outra possibilidade interessante a de trabalhar com contedo padro. Voc pode definir um contedo padro de exibio na rea da pgina de contedo, da mesma forma que voc define o restante da pgina. Na pgina de contedo, para exibir o contedo padro, basta clicar em Default to Master Content na Smart Tag do controle de contedo. Master Pages aninhadas Alem de tudo o que estudamos, possvel mais. Voc pode criar Master Pages aninhadas, em diferentes nveis. O VS 2005 no da suporte em sua IDE para este recurso, portanto voc ter que fazer todo o trabalho manualmente. 53
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

54
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

6. Themes e Skins
A formatao de suas pginas ASP.NET podero ser feitas de diversas maneiras, entre elas:

Uso de arquivos CSS; Formatao diretamente nas pagina.

Utilizando o novo recurso de temas, possvel definir um padro para toda a aplicao sem necessidade de altera qualquer pgina. As possibilidades so muitas, vamos ver um exemplo prtico.

Crie uma nova aplicao ASP.NET; Crie um WebForm com os seguintes controles:

Crie a pasta App_themes. Esta uma pasta de sistema do ASP.NET. Para cri-la acesse o menu WebSite, ASP.NET Folder, Themes.

Na caixa de dialogo Add New Item exibida em seguida, selecione Skin File, de o nome de Red.

Clique sobre o boto direito sobre a pasta Themes e crie um novo Skin, desta vez com o nome Gray.

55
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

A formatao de controles num Skin definida usando a prpria tag de definio do controle, obviamente que alguns atributos no devero ser utilizados, como ID ou text.

No exemplo abaixo o definio para o Skin Red:


<asp:Label runat="server" Font-Names="Arial" ForeColor="Maroon" /> <asp:Button runat="server" Font-Bold="True" ForeColor="Maroon" /> <asp:RadioButton runat="server" Font-Names="Arial" ForeColor="Maroon" /> <asp:CheckBox runat="server" Font-Names="Arial" ForeColor="Maroon" />

J o skin Gray fica assim:


<asp:Label runat="server" Font-Names="Verdana" ForeColor="Gray" /> <asp:Button runat="server" Font-Bold="True" ForeColor="DimGray" /> <asp:RadioButton runat="server" Font-Names="Verdana" ForeColor="Gray" /> <asp:CheckBox runat="server" Font-Names="Verdana" ForeColor="Gray" />

Agora vamos definir que sua pgina ASP.NET vai utilizar um Theme. Clique sobre o formulrio e localize a propriedade Theme, note que todos os temas criados esto disponveis:

56
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Escolha o tema Red. Nos bastidores o tema escolhido adicionado em uma diretiva da pgina:
<%@ Page Language="VB" Theme="RED" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>

Rode a aplicao e observe o resultado.

57
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Altere o tema para Gray e rode a aplicao novamente.

Definindo o tema dinamicamente

Voc pode definir o tema durante a execuo do programa, atravs de uma escolha do usurio, por exemplo. Para isto basta alterar a propriedade Theme da pgina: 58
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Page.Theme = "red"

Page.Theme = "Red";

A alterao de tema dinamicamente deve ser feita no evento PreInit da pgina. Definindo um tema para toda a aplicao Voc tambm pode definir um tema no arquivo de configurao da aplicao, no n system.web. Esta configurao ser aplicada automaticamente para todas as pginas da aplicao:
<pages theme="Red" >

O n pages j deve existir no seu arquivo de configurao, localize-o ao invs de criar um novo n. Vale lembrar que uma configurao de pgina sobrescreve a de aplicao. Portanto se em determinada pgina voc no quiser usar o tema padro da aplicao, basta definir o tema desejado na pgina. Apresentao diferenciada Se voc precisar dar uma apresentao diferente para um determinado controle que j esta definido no arquivo skin, voc pode criar um nova definio deste controle adicionando a ele um SkinId. Para exemplificar, vamos alterar o arquivo skin Red de maneira que o titulo da pgina, Cadastro, seja exibido maior e de outra cor. Primeiramente alteramos nosso arquivo Red:
<asp:Label runat="server" Font-Names="Arial" ForeColor="Maroon" /> <asp:Label SkinId="Titulo" runat="server" Font-Names="Arial" FontSize="X-Large" ForeColor="Black" /> <asp:Button runat="server" Font-Bold="True" ForeColor="Maroon" /> <asp:RadioButton runat="server" Font-Names="Arial" ForeColor="Maroon" /> <asp:CheckBox runat="server" Font-Names="Arial" ForeColor="Maroon" />

Observe que foi adicionada uma nova tag asp:label, com SkinID como Titulo. Agora basta na pgina, alterar a propriedade SkinID do controle para Titulo: 59
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Certifique-se que sua pgina esta utilizando o Skin Red. Rode a aplicao:

60
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

7. Navigation
Surgido no ASP.NET 2.0, so uma srie de controles para auxiliar a navegao do usurio. Estes controles podem ser encontrados no grupo Navigation da barra de ferramentas do VS 2008, so eles:

SiteMapPath Menu TreeView

SiteMapPath O controle SiteMapPath permite exibir um mapa de navegao para o usurio, numa estrutura hierrquica a partir da pgina raiz da aplicao. Para demonstrar as funcionalidades do controle, vamos criar um suposto aplicativo de comrcio eletrnico, com a seguinte estrutura:

61
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

A funcionalidade do controle SiteMapPath esta baseada em arquivo xml denominado web.sitemap, que pode ser facilmente criado pela opo Add New Item. Sua estrutura bsica a seguinte:
<?xml version="1.0" encoding="utf-8" ?> <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > <siteMapNode url="" title="" description=""> <siteMapNode url="" title="" description="" /> <siteMapNode url="" title="" description="" /> </siteMapNode> </siteMap>

Trata-se de um arquivo XML padro. O n raiz denominado SiteMap. A estrutura do site deve ser representada por ns SiteMapNode, onde estes devem ser organizados de forma a representar a estrutura hierrquica do site. O atributo Url define o endereo da pgina, Title o titulo a ser exibido no controle, e descrio o Tool Tip que tambm ser exibido no controle.

Importante ressaltar que o arquivo deve ser montado de forma hierrquica, ou seja, uma pgina deve ser adicionada dentro do n siteMapNode da pgina hierarquicamente superior.

Para nossa aplicao proposta anteriormente, montei o seguinte arquivo:


<?xml version="1.0" encoding="utf-8" ?> <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > <siteMapNode url="Index.aspx" title="Pgina Principal" description="Pgina Principal da Site"> <siteMapNode url="~/Informatica/Informatica.aspx" title="Departamento de Informtica" description="Produtos de Informtica"> <siteMapNode url="~/Informatica/Impressoras/Impressoras.aspx" title="Impressoras" description="VImpressoras Diversas" /> <siteMapNode url="~/Informatica/Monitores/Convencionais/Convencionais.aspx" title="Monitores Convencionais" description="Monitores Convencionais" /> <siteMapNode url="~/Informatica/Monitores/LCD/LCD.aspx" title="Monitores LCD" description="Monitores LCD" /> </siteMapNode> </siteMapNode> </siteMap>

62
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Observe que as impressoras esto dentro do n do departamento de informtica. Se no criarmos o arquivo desta forma, da pgina do departamento de informtica poderemos navegar apenas para a pgina inicial.

Observe o sistema rodando:

Voc no precisa configurar nenhuma propriedade do controle SiteMapPath para o mesmo funcionar, desde que o arquivo Web.sitemapth esteja correto. Bbasta adicionar o controle ao Web Form. Analisando a janela de propriedades do SiteMapPath, voc pode descobrir algumas coisas interessantes: Por exemplo, a propriedade Path Separator permite definir um caractere de separao entre os caminhos.

Atravs da Smart Tag voc tambm pode definir uma auto-formatao para seu controle.

Menu O controle Menu permite adicionar as funcionalidades de um menu em uma aplicao Web. Seu uso simples: aps adicionar um controle a um Web Form, basta abrir o 63
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

editor de itens do menu atravs da Smart Tag do controle ou mesmo da janela de propriedades, onde possvel gerenciar o contedo do Menu.

O editor de menu possui uma pequena barra de ferramentas com as seguintes funcionalidades:

Add a root item: Add a child item: Remove an iten:

Adiciona um novo item no mesmo nvel da seleo atual Adiciona um novo item um nvel acima da seleo atual Remove o item selecionado. Sobe o item verticamente; Desce o item verticalmente; Desce o item

Move the item up amongst its siblings: Move the item down amongst its siblings:

Make the selected item a sibling of its parent: horizontalmente; Make the selected item a sibling of its parent:

Sobe o item horizontalmente.

Cada item possui diversas propriedades configurveis, as mais significativas so text, que indica o texto a ser exibido no item, e navigateUrl: A URL de destino caso o usurio clique no item; 64
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Adicionar os itens e configurar suas propriedades tudo o que voc precisa para tornar o controle funcional, mas isso no tudo: Na smart tag do controle outra opo disponvel auto-format: Voc pode dar um visual agradvel ao seu menu sem muito trabalho.

Entre as propriedades do menu, orientation define o comportamento do menu: Horizontal ou Vertical. Ligando seu Menu a um arquivo Web.sitemap Se voc tem um arquivo Web.sitemap em sua aplicao, vimos que o controle SiteMapPath passa a utiliz-lo automaticamente, sem qualquer configurao ou alterao de propriedade.

Um controle Menu tambm pode fazer uso do arquivo, porm voc ter que lig-los manualmente. extremante simples:

Adicione um controle SiteMapDataSource ao seu Web Form (disponvel na Guia data da caixa de Ferramentas) No Menu, altera a propriedade DataSourceID para o controle SiteMapDataSource adicionado. Pronto! A partir de agora os itens de seu menu sero mapeados a partir do arquivo Web.sitemap que voc criou anteriormente.

65
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

TreeView O terceiro controle que estudaremos no capitulo o TreeView. Trata-se de um poderoso controle que nos permite exibir estruturas navegveis e aninhadas. Sua configurao bsica simples, ao mesmo tempo em que prove uma grande quantidade de propriedades e alguns eventos que tornam o controle altamente poderoso e flexvel.

Para usar o controle basta adicion-lo ao Web Form. Atravs da smart tag do controle podemos acessar um editor de itens idntico ao do controle Menu:

66
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Ainda na smart tag podemos definir um modelo de auto-formatao:

A propriedade Show Lines tambm presente na smart tag do controle permite que sejam exibidas linhas entre o n raiz e seus ns aninhados:

67
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Definidas as propriedades de cada Item, o controle esta pronto para ser utilizado. Ligando seu TreeView a um arquivo Web.sitemap Um controle TreeView tambm pode fazer uso do arquivo Web.sitemap, o processo o mesmo do Menu:

Adicione um controle SiteMapDataSource ao seu Web Form (disponvel na Guia data da caixa de Ferramentas)

No Menu, altera a propriedade DataSourceID para o controle SiteMapDataSource adicionado.

68
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Seleo Mltipla A propriedade ShowCheckBoxes permite que cada n seja transformado em caixas de verificao, de forma que voc poder selecionar mais de um n simultaneamente. Os valore possveis para esta propriedade so:

Root: Apenas os ns da raiz sero exibidos como caixas de verificao. Parent: Apenas os ns pais sero exibidos como caixas de verificao. Leaf: Apenas os ns folhas sero exibidos como caixas de verificao. All: Todos os ns sero exibidos como caixas de verificao.

69
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Verificar programaticamente quais ns esto marcados relativamente simples. Tudo a fazer percorrer a lista de ns do controle usando um lao for next. No exemplo abaixo o cdigo percorre a relao de ns e adiciona o texto do n a um listbox:

Dim node As TreeNode For Each node In TreeView1.CheckedNodes ListBox1.Items.Add(node.Text) Next

foreach (TreeNode node in TreeView1.CheckedNodes) { ListBox1.Items.Add(node.Text); }

Gerenciando o controle em tempo de execuo Voc tambm pode adicionar um n programaticamente. No exemplo abaixo o n adicionado na raiz do TreeView:

Dim node As New TreeNode node.Text = "Mveis para escritrio" node.NavigateUrl = "moveis.aspx" TreeView1.Nodes.Add(node)

TreeNode node; node = new TreeNode();

70
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

node.Text = "Mveis para escritrio"; node.NavigateUrl = "moveis.aspx"; TreeView1.Nodes.Add(node);

Adicionar um n aninhado a outro um pouco mais complicado. Primeiro voc deve localizar o n pai utilizando o mtodo FindNode, que recebe o caminho (path) do n. Ento basta adicionar um novo n a sua coleo de ns filhos:

Dim Atual As TreeNode = _ TreeView1.FindNode("PginaPrincipal/Departamento de Informtica") Dim Novo As New TreeNode Novo.Text = "Mveis para escritrio" Novo.NavigateUrl = "moveis.aspx" Atual.ChildNodes.Add(Novo)

TreeNode Atual = TreeView1.FindNode ("PginaPrincipal/Departamento de Informtica"); TreeNode Novo = new TreeNode(); Novo.Text = "Mveis para escritrio"; Novo.NavigateUrl = "moveis.aspx"; Atual.ChildNodes.Add(Novo);

Na imagem abaixo voc pode ver o resultado:

Para remover ns temos o mtodo Remove.

Finalmente, podemos recolher um TreeView em tempo de execuo: 71


ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

TreeView1.CollapseAll

TreeView1.CollapseAll();

Ou mesmo expandir:

TreeView1.ExpandAll;

TreeView1.ExpandAll();

72
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

8. WebParts
WebParts no um conceito novo, mas que surgiu a partir do ASP.NET 2.0 de forma fcil e poderosa.

WebParts nos permite criar pginas com contedo gerencivel pelo usurio, onde esse pode arrastar controles, mudar aparncias, ocultar o que no for preciso ou exibir novamente, enfim, traz para o ambiente Web uma interatividade completa entre o usurio e a aplicao, tudo isto com persistncia. Modos Uma pgina ASP.NET utilizando WebParts pode estar em diferentes modos. Cada modo diz respeito ao comportamento do contedo da pgina e como o usurio poder interagir com este contedo. Os quatro modos possveis so:

Normal: A pgina esta em modo normal, no permite quase nenhuma interatividade com o usurio; Catalog: Exibe a relao de sees da pgina, bem como permite ao usurio indicar em qual seo determinado item dever permanecer. Permite restaurar controles que foram fechados. Design: Permite fazer o gerenciamento de zonas em uma pgina; Edit: Permite editar zonas de uma pgina WebPartManager O WebPartManager um controle disponvel na guia WebParts e o responsvel por todo o gerenciamento do contedo e de seu estado. o principal controle e obrigatrio quanto trabalhamos com WebParts.

O gerenciamento de estado e contedo do WebPartManager feito utilizando um banco de dados do SQL Server 2005, de nome ASPNETDB.MDF, que pode ser encontrando dentro da pasta App_Data.

73
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

WebPartZone Outro controle importantssimo e essencial o WebPartZone. Atravs deste podemos definir as zonas onde sero agrupados o contedo da pgina. Este controle um container para controles comuns, que de forma declarativa devem estar dentro da tag ZoneTemplate. Utilizando WebParts Crie uma nova aplicao ASP.NET; Coloque sobre o Web Form criado um controle WebPartManager; Coloque sobre o Web Form criado um controle WebPartZone; Atravs da Smart Tag escolha uma das opes de auto-formatao; Arraste para dentro do WebPartZone criado dois controles textbox; Rode a aplicao

Com esta simplicidade nossa aplicao j contem alguma interatividade. Observe que cada controle dentro da WebPartZone pode ser minimizado ou fechando, atravs da seta a direita do controle:

74
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Caso no aparea em sua aplicao o menu, ou mesmo se voc no consegue alterar o modo de sua pgina, basta voc autenticar o usurio que esta acessando a pgina, ou seja, no permitir acesso annimo. A maneira mais simples de faz isto utilizando autenticao integrada do Windows. Se voc fechar um controle, no conseguir mais restaur-lo, mesmo que reinicie a aplicao. Isto porque o WebPartManager mantm o estado da aplicao. Na prxima seo veremos que no modo Catalog podemos trazer os controles fechados de volta ao formulrio. Observe que no exemplo acima os controles possuem um texto personalizado, Primeiro e Segundo. Isto pode ser feito atravs do atributo Title de cada controle contido dentro da Zone Template. Isto deve ser feito de forma declarativa, pois esta no uma propriedade do controle:
<ZoneTemplate> <asp:TextBox Title="Primeiro" ID="TextBox1" runat="server"></asp:TextBox> <asp:TextBox Title="Segundo" ID="TextBox2" runat="server"></asp:TextBox> </ZoneTemplate>

Voc tambm pode personalizar os textos do Menu de controle atravs das propriedades CloseVerb e MinimizeVerb, procurando pelo atributo Text. Outras mensagens e rtulos que surgiro mais adiante podero tambm ser personalizadas, basta procurar a propriedade equivalente. Modo Catalog Como dissemos o modo padro de uma pgina o Normal. Vamos ver agora como colocar uma pgina em modo Catalog, e quais as funcionalidades deste modo. Porm antes vamos criar mais duas zonas, para isto adicione mais dois novos controles WebPartZone ao formulrio. Dentro do primeiro adicione dois controles Button, e no segundo dois controles CheckBox. Adicione um terceiro boto, alterando a propriedade text para Catalog, porm no o coloque dentro de nenhuma zona.

Para que seja possvel colocar a pgina em modo catalogo voc deve adicionar um controle CatalogZone. De ao mesmo uma auto formatao. O Controle CatalogZone um container para Catlogos de Pgina. Coloque um controle PageCatalogPart dentro do CatalogZone. 75
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

De um duplo clique sobre o boto Catalog, no manipulador de evento criado adicione o seguinte cdigo:

Dim mgr As WebPartManager mgr = WebPartManager.GetCurrentWebPartManager(Page) mgr.DisplayMode = mgr.SupportedDisplayModes.Item("Catalog")

WebPartManager mgr; mgr = WebPartManager.GetCurrentWebPartManager(Page); mgr.DisplayMode = mgr.SupportedDisplayModes["Catalog"];

O cdigo acima declara um tipo WebPartManager e recebe o gerenciador da pgina por referencia, em seguida altera seu modo para Catalog. Rode a aplicao e a coloque no modo Catalog. Neste modo voc pode:

Restaurar um controle fechado. Note que atravs das zonas listadas no DropDownList Add to voc pode inclusive restaurar o controle em outra zona:

76
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Arrastar controles entre as zonas. Para isto basta clicar no titulo do controle e arrast-lo at a posio desejada:

77
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Voc pode ainda querer voltar a pgina ao modo normal. Para isto adicione um novo boto externo a qualquer zona, coloque o titulo Normal e adicione o seguinte cdigo:

Dim mgr As WebPartManager mgr = WebPartManager.GetCurrentWebPartManager(Page) mgr.DisplayMode = mgr.SupportedDisplayModes.Item("Browse")

WebPartManager mgr; mgr = WebPartManager.GetCurrentWebPartManager(Page); mgr.DisplayMode = mgr.SupportedDisplayModes["Browse"];

As alteraes que o usurio faz nas zonas so persistentes, voltar ao modo normal no ir desfaz-las. Modo Design Neste modo o usurio pode, alem de minimizar e fechar um controle, arrast-los de uma zona para outra ou mesmo orden-los, tarefas que so possveis tambm no modo 78
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Catalog, porm sem exibir o controle CatalogZone e sem possibilidade de mostrar um controle oculto.

Veja abaixo um exemplo de como colocar a pgina em modo Design:

Dim mgr As WebPartManager mgr = WebPartManager.GetCurrentWebPartManager(Page) mgr.DisplayMode = mgr.SupportedDisplayModes.Item("Design")

WebPartManager mgr; mgr = WebPartManager.GetCurrentWebPartManager(Page); mgr.DisplayMode = mgr.SupportedDisplayModes["Browse"];

Modo Edit O modo mais complexo e rico em funcionalidades o modo de Edio. Atravs dele o usurio final poder personalizar inmeros aspectos dos controles, como aparncia, comportamento e layout.

O Modo de edio possvel com a adio do controle EditorZone, este tambm um container, que pode receber um ApperanceEditorPart e/ou BehaviorEditorPart e /ou LayoutEditorPart e /ou PropertyEditorPart.

Vamos os dois primeiros em funcionamento, para isso adicione um controle EditorZone a sua pgina e um button com a propriedade text configurada como Edit. No manipulador de evento do boto adicione o seguinte cdigo:

Dim mgr As WebPartManager mgr = WebPartManager.GetCurrentWebPartManager(Page) mgr.DisplayMode = mgr.SupportedDisplayModes.Item("Edit")

WebPartManager mgr; mgr = WebPartManager.GetCurrentWebPartManager(Page); mgr.DisplayMode = mgr.SupportedDisplayModes["Edit"];

preciso fazer algumas configuraes para o modo de edio funcionar.

Primeiramente adicione o seguinte n ao arquivo web.config de sua aplicao 79


ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

<webParts> <personalization> <authorization> <allow users="*" roles="admin" verbs="enterSharedScope"/> </authorization> </personalization> </webParts>

Esta configurao deve estar dentro do n system.web.

Em seguida adicione o seguinte cdigo ao evento PageLoad da pgina:

If WebPartManager1.Personalization.Scope = PersonalizationScope.User _ AndAlso WebPartManager1.Personalization.CanEnterSharedScope Then WebPartManager1.Personalization.ToggleScope() End If

if (WebPartManager1.Personalization.Scope = PersonalizationScope.User && WebPartManager1.Personalization.CanEnterSharedScope) { WebPartManager1.Personalization.ToggleScope(); }

Para no tornar o aprendizado mais claro e simples, vamos estudar um os quatro editores existentes. ApperanceEditorPart Adicione um controle ApperanceEditorPart ao EditorZone. Rode a aplicao e clique em Edit para permitir que um controle entre em modo de edio. Observe que em todo o controle, no menu a esquerda, surge uma nova opo: Edit:

80
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Ao clicar na opo Edit, as opes do controle ApperanceEditorPart que adicionamos ao container so exibidas, voc pode alter-las a seu gosto. Para persistir as alteraes clique em Apply, ou Cancel para cancelar.

81
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

As alteraes iro persistir mesmo se voc fechar o navegador. BehaviorEditorPart Remova o ApperanceEditorPart e adicione um BehaviorEditorPart, clique no boto Edit e em seguida no comando edit de algum controle:

82
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

83
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Veja que so muitas configuraes de comportamento possveis. Faa alguns testes, por exemplo, desmarque a opo Allow Close e verifique que a opo de fechar desaparece do controle.

84
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

9. Acesso a Dados
Um das novidades no lanamento do primeira verso do Framework .NET, foi o ADO.NET, sucessor do ADO que at ento era o modelo de acesso a dados da Microsoft. Surgiu com a promessa de ser um modelo desconectado para um mundo conectado: sua arquitetura era preparada para a Internet, onde as aplicaes poderiam abrir uma conexo e recuperar dados, fechar a conexo, trabalhar desconectados e s voltar a abrir a conexo no momento de atualizar a fonte de dados. O ADO.NET cumpriu seu objetivo: Trouxe um modelo de acesso a dados poderoso e bastante flexvel, otimizado para aplicaes remotas. SQLDataSource e GridView O modelo de acesso a dados proposto pelo ADO.NET embora poderoso, extramente complexo: para executar operaes em uma fonte de dados o desenvolvedor teria que utilizar uma grande quantidade de classes como Connection, Transaction, Command, DataReader, DataAdapter, DataSet, DataTable etc. e entender como elas se interrelacionam. Na verdade isso no mudou desde a verso 1.1: A estrutura do ADO.NET basicamente a mesma. Porm uma novidade a partir do .NET 2.0 foram algumas classes denominados DataSource, entre eles o SQLDataSource.

Estudamos no mdulo II a classe SiteMapDataSource

As classes DataSource uma classe que nos permite acessar diversos bancos de dados relacionais ou no, e que internamente utiliza diversas objetos do ADO.NET, tornando o seu uso mais simples atravs de um nico objeto. Por exemplo, para retornar um conjunto de dados de um servidor SQLServer, por exemplo, voc precisar no mnimo de um SQLConnection, um SQLCommand e um SQLDataReader. Por outro lado voc pode obter o mesmo conjunto de dados utilizando um nico SQLDataSource, que internamente far uso destes objetos. 85
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Apesar do SQLDataSource fornecer um modelo simplificado e mais amigvel, voc deve conhecer os componentes do ADO.NET, pois a verdadeira funcionalidade de acesso a dados est nestas classes. ADO.NET ser estudado mais adiante neste capitulo. Para demonstrar como fcil e rpido criar uma aplicao que retorne uma tabela de um banco de dados em uma pgina ASP.NET, vamos demonstrar passo a passo a criao de uma aplicao utilizando o SQLDataSource. Uma tabela sem nenhum cdigo Neste exemplo voc ver que possvel retornar um conjunto de dados sem escrever sequer uma linha de cdigo: Nestes exemplos estaremos utilizando o banco de dados AdventureWorks, que o banco de dados de demonstrao do SQL Server 2005. Voc pode baixar este banco de dados do site oficial do SQL Server e instal-lo, inclusive na verso Express. Se preferir voc pode praticar com qualquer outro banco de dados, inclusive da verso 2000.

Crie uma nova aplicao ASP.NET; Da barra de ferramentas Data, arraste um controle SQLDataSorce para o Web Form Default.aspx; Na Smart Tag do controle, clique em Configure DataSource;

86
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

exibido um assistente de configurao. Na primeira etapa voc deve informar com qual servidor deseja realizar a conexo. Para isto clique em New Connection, selecione Microsoft SQL Server em Data Source e .NET FrameWork Data Provider for SQL Server em Data Provider, em seguida clique em continue.

Em seguida exibida a caixa de dialogo Add Connection, onde voc deve informar as opes de conexo com os servidor:

87
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

De volta ao assistente, clique em Next; Neste passo voc deve definr uma clausula Where e / ou OrderBy. Se voc informar que deseja salvar a String de Conexo. Mantenha a opo marcada com o nome padro para a string de conexo; No prximo passo voc deve montar a consulta SQL. Informe uma tabela e as colunas que deseja incluir na consulta. Se incluir a chave primaria entre as colunas de seus Select, atravs da opo Advanced poder ainda solicitar que sejam criados comandos SQL para incluso, alterao e excluso:

88
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

A prxima etapa permite que voc teste a consulta SQL Criada. Clique em Finish. Se voc examinar seu arquivo aspx poder notas que o assistente configurou diversas propriedades do controle:

89
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:AdventureWorksConnectionString %>" DeleteCommand="DELETE FROM [Department] WHERE [DepartmentID] = @DepartmentID" InsertCommand="INSERT INTO [Department] ([Name], [GroupName], [ModifiedDate]) VALUES (@Name, @GroupName, @ModifiedDate)" SelectCommand="SELECT * FROM [Department]" UpdateCommand="UPDATE [Department] SET [Name] = @Name, [GroupName] = @GroupName, [ModifiedDate] = @ModifiedDate WHERE [DepartmentID] = @DepartmentID"> <DeleteParameters> <asp:Parameter Name="DepartmentID" Type="Int16" /> </DeleteParameters> <UpdateParameters> <asp:Parameter Name="Name" Type="String" /> <asp:Parameter Name="GroupName" Type="String" /> <asp:Parameter Name="ModifiedDate" Type="DateTime" /> <asp:Parameter Name="DepartmentID" Type="Int16" /> </UpdateParameters> <InsertParameters> <asp:Parameter Name="Name" Type="String" /> <asp:Parameter Name="GroupName" Type="String" /> <asp:Parameter Name="ModifiedDate" Type="DateTime" /> </InsertParameters> </asp:SqlDataSource>

Alm dos comandos de seleo, atualizao, excluso e incluso, foram criados os parmetros para a execuo destas operaes. Isto foi possvel graas a incluso da chave primria entre os campos a serem utilizados durante o assistente.

Vamos agora exibir os dados na pgina:

Adicione um GridView da barra de ferramentas data. Use a opo Auto Format da Smart Tag do controle para definir um layout para a tabela. O GridView ser estudado melhor neste capitulo, por enquanto ele um acessrio para o estudo do SQLDataSource.

Ainda na Smart Tag, selecione SQLDataSource1 na opo ChoseDataSource.

Marque as opes Enable Paging. Enable Sorting, Enable Editing, Enable Deleting e Enable Selecion na Smart Tag:

90
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Por fim, adicione a propriedade DataKeyNames, o(s) nome(s) do(s) campo(s) que compe a chave primria da tabela. Rode a aplicao

Parabns! Voc acabou de criar um software para exibir uma tabela em uma aplicao Web, onde possvel ordenar, paginar, alterar e excluir registros sem escrever nenhuma nica linha de cdigo!!

91
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Obviamente se a operao de incluso ou atualizao violar alguma regra de integridade do banco de dados, ser gerado um erro.

As operaes de atualizao e excluso s ocorrero de forma correta desde que voc tenha as instrues SQL respectivas configuradas de forma correta.

Vamos ver agora algumas propriedades importantes do SQLDataSource: Cache O SQLDataSource possui embutido suporte a cache. Isto significa que aps a execuo de uma consulta, o conjunto de resultados ser armazenados na memria do servidor. Na prxima consulta ao invs de recuperar as informaes do banco de dados, o SQLDataSource ir recuper-los do cache.

Para habilitar cache no SQLDataSource, basta definir a propriedade EnableCache como True. A propriedade CacheDurantion deve conter o tempo, em segundos, que os dados sero mantidos em cache antes de nova consulta.

DataSourceMode Esta propriedade indica como os dados sero carregados: Em um objeto DataSet ou um objeto DataReader. No modo DataSet o controle que estiver ligado ao SQLDataSource ter mais funcionalidades, como paginao e ordenao. No modo DataReader estas funcionalidades no estaro disponveis, porm por se tratar de um cursor unidirecional e somente leitura, seu desempenho superior. ConnectionString Atravs desta propriedade definida a string de conexo, que contem as informaes para conexo como sistema gerenciador de banco de dados. Executando uma consulta com parmetros Voc pode querer definir dinamicamente um valor para a clausula where de sua consulta. Para isto criamos um parmetro e definimos um valor em tempo de execuo.

92
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

O ASP.NET 2.0 prove funcionalidade para diversos tipos de parmetros, como uma QueryString, um controle, um cookie, uma varivel de sesso entre outros.

Para exemplificar, vamos filtrar nossa consulta a partir de um valor da QueryString do formulrio, para isso faremos uma pequena alterao na propriedade SelectQuery do SQLDataSource, adicionando uma clausula where e um parmetro de nome DepartmentID do tipo QueryString:

Ao rodar a aplicao passando um valor para a QueryString, nossa consulta filtrada:

93
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Neste segundo exemplo, vamos obter o valor para passar ao parmetro atravs de um controle. Primeiramente adicionamos um controle textbox ao formulrio, em seguida modificamos o mesmo parmetro criado h pouco:

94
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Coloque um button no formulrio para causar um postback, preencha um valor no textbox e clique no button, mesmo sem cdigo nenhum nos eventos de servidor o filtro dever funcionar graas ao viewstate do textbox. Voc pode utilizar parametros tambm para as operaes de atualizao, excluso e incluso.

Mais GridView Na primeira verso do ASP.NET, um dos controles mais famoso foi o DataGrid. Com ele era possvel exibir dados tabulares com pouco cdigo. No ASP.NET 2.0 ele foi substitudo pelo GridView, um controle ainda mais poderoso e que permite que muita coisa possa ser feita sem uma linha de cdigo sequer. Na seo anterior estudamos rapidamente o GridView, vamos agora entende-lo melhor. Editando Colunas Voc j viu como configurar um SQLDataSource. Faa isso e adicione um GridView a um Web Form. Na Smart Tag do GridView indique o SQLDataSource no item Choose Data Source. Isto tambm pode ser feito atravs da propriedade DataSourceID. Ainda na Smart Tag, selecione Edit Colums. exibido o editor de colunas:

95
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

A rea de edio de colunas dividida em trs partes. Na pequena rea acima esquerda temos a relao de campos disponveis. BoundFields so campos oriundos de nossa fonte de dados, se voc j ligou seu DataGridView ao SQLDataSource, os campos j devem aparecer disponveis nesta sesso. Podemos ainda definir campos como CheckBoxField, HyperLinkField, ButtonField, ImageField, CommandField que podem ser Edit, Update, Cancel ou Select ou Delete, e TemplateField, onde podemos criar um campo Customizado.

Em baixo a esquerda vemos os campos selecionados para exibio em nosso GridView, e a direita, podemos configurar as propriedades de cada campo. Voc pode, por exemplo, criar uma mascara de formatao para exibir um valor de moeda, ou mesmo mudar o texto do cabealho do campo.

Na tela acima, observe que exibido entre os campos selecionados, um campo CommandField. Isto porque na Smart Tag do controle foram marcadas as opes de habilitar seleo, excluso e edio. Podemos definir a aparncia destes botes.

96
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Por exemplo, se voc quer que eles apaream a direita do GridView e no a esquerda, basta move-los para baixo. A propriedade ButtonType permite os mesmos sejam exibidos como, por exemplo, botes ou imagens ao invs de links. Se voc optar por imagem deve informar o caminho delas atravs da propriedade ImageUrl, formado pelo prefixo do nome do boto. Outra propriedade importante definir o texto de cada boto.

Vejam um exemplo de um GridView com alguma personalizao:

Se seu DataSource tiver um campo do tipo boleano, ser incluido automaticamente entre as colunas disponveis um CheckBoxFiled No vamos estudar todas as propridades de cada tipo de campo. O importante voc saber onde encontra-las.

Utilizando um DetailView Uma outra novidade a partir do ASP.NET 2.0 o DetailView. Sua principal utilidade exibir detalhes de um nico registro, que normalmente so ocultados num GridView por

97
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

otimizao de espao. Voc tambm pode utiliz-lo para incluir ou at mesmo excluir um registro. Para utiliz-lo basta adicionar ao Web Form e configurar suas principais propriedades atravs da smart tag, no esquecendo de informar a fonte de dados e de configurar as colunas. O ideal que colunas que estejam marcadas como invisveis no GridView, sejam visualizadas no DetailView.

Para que o controle se mantenha atualizado, ou seja, exiba sempre os detalhes do registro selecionado no GridView, preciso adicionar um segundo SQLDataSource, cujo comando de seleo tenha um parmetro que aponte para campo chave do item selecionado no GridView. A tela abaixo exibe a construo de um parmetro. Observe que indicada a coluna, o operador, a origem (source) que control, e em ControlID informamos o GridView que fornecer o valor para o parmetro.

Abaixo voc pode observar a aplicao em execuo:

98
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

FormView Com certa semelhana com o DetailView, o FormView formado por diversos templates com controles como labels e caixas de texto. ideal para exibir dados na tela em forma de formulrio. Tambm possui templates prontos e incluir um novo registro. Se seus SQLDataSource possui a instruo Insert, o FormView vai estar pronto para a incluso de novos registros. No imagem abaixo podemos ver um FormView conectado a um SQLDataSource:

99
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Abaixo voc pode observar os templates que formam o FormsView. Cada um deles pode ser configurado de acordo com sua funcionalidade.

Controles ListView e DataPager Os controles ListView e DataPager foram introduziados no ASP.NET .35. Desde o lanamento da primeira verso do ASP.NET a Microsoft incluiu em suas IDEs diversos controle de listagem de dados: DataGrid, GridView, Repeater entre outros. Embora sejam todos controles de listagem de dados, eles tem focos diferentes: o Repeater permite maior controle sobre o contedo renderizado, o DataList veio otimizado para exibio de dados em vrias colunas etc. A evoluo mesmo ficou por conta dos 100
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

controles

multifuncionais , inicialmente o DataGrid na verso 1.X, o GridView

surgindo na verso 2.0 trazendo novas caractersticas e agora, no ASP.NET 3.5, o ListView.

O ListView tudo de bom: Permite maior controle sobre o contedo gerado atravs de diversos eventos e templates, e, na minha opinio, o mais interessante: agora com um InsertItemTemplate. O que isto significa? As operaes de insert para o DataGrid e para o GridView eram rfs e tinham que ser tratadas a parte. Particularmente, com o GridView, eu colocava um Formview em modo de insero no EmptyDataTemplate do GridView, e, ao clicar em um boto inserir normalmente colocado sobre o cabealho de uma coluna, desconectava o controle de seu datasource. O efeito era que a listagem de dados desaparecia dando lugar ao controle para insero.Agora finalmente posso ter todas as operaes (Select, Insert, Update, Delete) em um mesmo controle! A insero por padro feita prxima ao rodap do Listview.

ListView na prtica Se voc j usou algum ancestral do ListView no ter qualquer dificuldade em se familiarizar com este novo controle. Neste exemplo utilizo a boa e velha base de dados NorthWind, rodando em uma instancia do SQL Server 2005 Express. Vale lembrar que voc pode baixar esta base de dados como um download independente a qualquer momento, atravs do site da Microsoft, ou utilize qualquer base de dados de sua preferncia.

Primeiramente abra o Visual Studio 2008, clique em New Web Site. Selecione .NET Framework 3.5 em na parte superior da janela, marque a opo ASP.NET Web Site e escolha a linguagem de sua preferncia.

101
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Abra a guia Data na caixa de ferramentas. Neste tutorial vamos trabalhar com trs controles: ListView, DataPager e SqlDataSource. Observe na asp3imagem abaixo os controles circulados:

Inicialmente jogue um controle ListView sobre o WebForm.

102
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Na SmartTag do controle, clique em New data source, desta forma o Visual Studio vai criar um novo controle de acesso a dados. Poderamos ter feito isto manualmente, arrastando um controle SqlDataSource para o WebForm.

exibido o DataSource Configuration Wizard. Na primeira etapa devemos informar a origem dos dados. Selecione Database e clique em Ok.

Na prxima etapa devemos configurar a conexo:

103
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Clique em New Connection e informe os dados de sua conexo, como no exemplo abaixo:

De volta ao assistente, clique em Next. Nesta etapa voc deve informar se deseja salvar a string de conexo no arquivo de configurao da aplicao (Web.config). Marque sim e clique em Next.

Agora o momento de informar a tabela ou a consulta que vai dar origem aos dados. No exemplo abaixo selecionei a tabela Employees com algumas colunas.

104
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Antes de prosseguir, clique em Advanced e marque a opo Generate Insert, Update, and Delete statements para que o Visual Studio produza automaticamente as instrues Sql para que o ListVew possa incluir, atualizar e excluir dados automaticamente. Importante observar que para esta opo estar habilitada fundamental que entre as colunas selecionadas estejam aquelas que compem a chave primria da tabela. No exemplo acima trata-se da coluna EmployeeID.

Clique em Next, nesta ltima opo do assistente voc pode testar a consulta gerada. Clique em Finish. Se observarmos o cdigo gerado para o ListView at o momento demasiadamente simples, pois ainda no definimos nenhuma propriedade alm de DataSourceID: 105
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

<asp:ListView ID="ListView1" runat="server" DataSourceID="SqlDataSource1"> </asp:ListView>

Vamos tratar de configurar o ListView. Voltando a rea de design, na Smart tag do ListView clique em configure ListView:

Nesta janela podemos configurar as funcionalidade principais do ListView. Primeiramente um Layout, teste todas as opes e veja o comportamento na janela Preview. Abaixo voc pode selecionar um estilo. Em opes devemos informar se o ListView vai ter habilitadas funes de edio, insero, excluso e paginao. Para este exemplo deixa marcado todas as opes, com exceo de paginao:

Clique em ok e rode a aplicao. Observe que temos agora uma listagem de dados 100% funcional. Observe que a linha de insero includa no junto ao rodap da listagem: 106
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

DataPager Assim como seus ancestrais, o ListView tem paginao nativa embutida. Porm agora temos um controle de paginao parte: O DataPager.

Curioso que o DataPager funciona apenas com o ListView. Voc deve estar se perguntando: Ento porque us-lo ao invs da paginao embutida no ListView? Como um controle separado temos mais poder sobre como queremos nossa paginao. Tambm devemos lembrar que o DataPager no foi concebido para funcionar exclusivamente com o ListView, mas com qualquer controle que implemente a interface IPageableItemContainer. No ambiente do ASP.NET 3.5 este o nico controle nativo que implementa tal interface.

Mos a obra. Arraste um controle DataPager para o Web Form. Na janela de propriedades do controle, defina PagedControlId para ListView1 e PageSize para 5, pois a tabela que escolhi para o exemplo possui menos que 10 registros:

Na Smart Tag do DataPager, defina um estilo de paginao, que pode ser com botes do tipo prximo/anterior ou mesmo numrica. Para o exemplo escolhi Prximo/anterior: 107
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Neste momento, ao rodar a aplicao, j temos nosso ListView com as funcionalidades de paginao em funcionamento:

Ado.net Como dissemos no inicio do capitulo, o ADO.NET foi criado para ser um modelo de dados desconectado, pronto para Web.

formando por uma srie de objetos, alguns independentes de fonte de dados, outros no. Um objeto independe de fonte pode abrigar ao mesmo tempo dados de origens diversas, como por exemplo, uma tabela de um banco de dados Oracle e outra de um arquivo Access.

O Objeto de conexo para o SQLSever o SQLConnection. Havendo uma conexo os dados podem ser recuperados para um SQLDatareader, SQLCommand ou mesmo um DataSet.

O SQLCommand permite executar um comando SQL contra uma fonte de dados. Pode trabalhar apenas com um SQLConnection ou em conjunto com outras classes ADO.NET.

Um SQLDataReader um cursor unidirecional e somente leitura. timo para leitura de dados ou gerao de relatrios, pois veloz. Porm no permite qualquer alterao nos dados, alm de monopolizar a conexo com o banco de dados enquanto esta operando.

108
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Um DataSet um pequeno banco de dados em memria. Voc no precisa de uma conexo permanente com o banco de dados enquanto estiver utilizando os dados. Voc pode abrir a conexo, recuperar os dados, executar alteraes, excluses ou incluses, abrir novamente a conexo e atualizar a fonte de dados. Dentro de uma DataSet podemos ter uma ou mais DataTables, que so tabelas, que podem ter origens de fontes de dados independentes. Podemos ainda ter DataRelations, que representam relaes entre tabelas. Uma DataTable formado por DataRows, que representam colunas. Outra classe importante DataView, que exatamente o que parece: Uma viso de dados. Um DataTable possui um DataView padro, outros podem ser criados. Todos os objetos descritos neste pargrafo so independentes da fonte dos dados, pois so armazenados em memria no formato XML. Agora como transformar dados de uma fonte especifica em um DataSet? Esta tarefa do SQLDataAdapter , que faz a transformao dos dados entre a sua origem, atravs da conexo, at o DataSet e vice-versa. O SQLDataAdapter devolve a conexo no estado que a encontrou: Se estava aberta, mantm aberta. Se estava fechado, abre, executa a operao e fecha a conexo.

109
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Vamos ver as principais classes do ADO.NET Embora existam provedores para acessar as mais variadas fontes de dados, iremos demostrar as funcionalidades do ADO.NET com classes de acesso ao SQLServer. A funcionalidade das demais classes bem semelhante. SQLConnection Para utilizar as classes ADO.NET para SQL Server, voc deve importar o namespace system.data.sqlclient. Para as classes independentes de fonte de dados, como o DataSet, o namespace sytem.data O SQLConnection representa uma conexo com um banco de dados SQLServer. Suas principais propriedades so ConnectionString, que a string com os parmetros de conexo com o servidor. Entre os mtodos temos Open, que abre a conexo, e close, que fecha a mesma. A propriedade State retorna o estado atual da conexo. Vejamos o exemplo abaixo:

110
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Dim Conexao As New SqlConnection Conexao.ConnectionString = "Data Source=LOCALHOST\SQLEXPRESS;" & _ "Initial Catalog=AdventureWorks;Integrated Security=True" Conexao.Open() 'Executa algum cdigo Conexao.Close()

SqlConnection Conexao = new SqlConnection(); Conexao.ConnectionString = "Data Source=LOCALHOST'\'SQLEXPRESS;" + "Initial Catalog=AdventureWorks;Integrated Security=True"; Conexao.Open(); //Executa algum cdigo Conexao.Close();

Ao abrir uma conexo mil coisas podem dar errado: O servidor no estar disponvel, a string de conexo esta errada, o usurio no ter permisso de acesso...s para citar algumas. Por este motivo a abertura da conexo acima deveria ser protegida em um bloco try...except. Isto foi omitido para fins de clareza do cdigo...no mundo real, uma prtica que deve ser considerada.

SQLCommand A classe SQLCommand permite que sejam executados quaisquer comando SQL. Para ser executado com sucesso precisa de uma instruo SQL ou de um nome de tabela ou procedure, a ser informada na propriedade CommandText e uma conexo informada atravs da propriedade Connection, que deve ser um objeto SQLConnection.

A execuo do comando pode ser feito atravs de quatro mtodos distintos:

ExecuteNonQuery: Ideal para execuo de instrues que no retornam um conjunto de dados. Retorna um valor inteiro informando o nmero de linhas afetadas;

ExecuteReader: Para utilizao com um SQLDataReader, a ser estudado na prxima sesso; ExecuteScalar: Retorna apenas a primeira coluna da primeira linha, o restante dos valores so ignorados. Ideal para sumarizao de valores.

O exemplo abaixo retorna o total de registros de uma tabela e exibe em um textbox, para funcionar perfeitamente basta encaix-lo no comentrio do exemplo anterior, de demonstrao da conexo: 111
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Dim comando As New SqlCommand comando.Connection = Conexao comando.CommandText = "SELECT COUNT(*) FROM Sales.Currency" Dim a As Integer = comando.ExecuteScalar TextBox1.Text = Convert.ToString(a)

SqlCommand comando = new SqlCommand(); comando.Connection = Conexao; comando.CommandText = "SELECT COUNT(*) FROM Sales.Currency"; int a = Convert.ToInt32(comando.ExecuteScalar()); TextBox1.Text = Convert.ToString(a);

SQLDataReader Como dito o SQLDataReader um cursor unidirecional e somente leitura, porm muito veloz. Voc pode ligar seu resultado diretamente a um controle:

Dim comando As New SqlCommand comando.Connection = Conexao comando.CommandText = "SELECT CurrencyCode,Name FROM Sales.Currency" Dim reader As SqlDataReader = comando.ExecuteReader GridView1.DataSource = reader GridView1.DataBind()

SqlCommand comando = new SqlCommand(); comando.Connection = Conexao; comando.CommandText = "SELECT CurrencyCode,Name FROM Sales.Currency"; SqlDataReader reader = comando.ExecuteReader(); GridView1.DataSource = reader; GridView1.DataBind();

Neste outro exemplo, ele ligado a um DropDownList. Note que nome da moeda ligado a propriedade TextField, enquanto o cdigo a propriedade Valuefield, desta forma ser exibida a nome da moeda para o usurio, mas programaticamente poderemos facilmente recuperar o cdigo da moeda selecionada:

Dim comando As New SqlCommand comando.Connection = Conexao comando.CommandText = "SELECT CurrencyCode,Name FROM Sales.Currency" Dim reader As SqlDataReader = comando.ExecuteReader DropDownList1.DataSource = reader DropDownList1.DataValueField = "CurrencyCode" DropDownList1.DataTextField = "Name" DropDownList1.DataBind()

112
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

SqlCommand comando = new SqlCommand(); comando.Connection = Conexao; comando.CommandText = "SELECT CurrencyCode,Name FROM Sales.Currency"; SqlDataReader reader = comando.ExecuteReader(); DropDownList1.DataSource = reader; DropDownList1.DataValueField = "CurrencyCode"; DropDownList1.DataTextField = "Name"; DropDownList1.DataBind();

No prximo exemplo, temos apenas uma pequena alterao: passado um argumento a sobrecarga do construtor do ExecuteReader: CommandBehavior, que um enumerador que vai determinar o comportamento do SQLDataReader. Neste exemplo, CommandBehavior.CloseConnection fecha a conexo com o banco de dados aps a utlizao:

Dim comando As New SqlCommand comando.Connection = Conexao comando.CommandText = "SELECT CurrencyCode,Name FROM Sales.Currency" Dim reader As SqlDataReader = comando.ExecuteReader(CommandBehavior.CloseConnection) DropDownList1.DataSource = reader DropDownList1.DataValueField = "CurrencyCode" DropDownList1.DataTextField = "Name" DropDownList1.DataBind()

SqlCommand comando = new SqlCommand(); comando.Connection = Conexao; comando.CommandText = "SELECT CurrencyCode,Name FROM Sales.Currency"; SqlDataReader reader = comando.ExecuteReader(CommandBehavior.CloseConnection); DropDownList1.DataSource = reader; DropDownList1.DataValueField = "CurrencyCode"; DropDownList1.DataTextField = "Name"; DropDownList1.DataBind();

Finalmente, para percorrer os itens de um SQLDataReader, podemos utilizar o mtodo Read, que retorna verdadeiro e avana um registro, enquanto houverem linhas disponveis. Neste exemplo as linhas so adicionadas a um ListBox:

Dim comando As New SqlCommand comando.Connection = Conexao comando.CommandText = "SELECT CurrencyCode,Name FROM Sales.Currency" Dim reader As SqlDataReader = comando.ExecuteReader(CommandBehavior.CloseConnection) While reader.Read ListBox1.Items.Add(reader.Item("Name")) End While

113
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

SqlCommand comando = new SqlCommand(); comando.Connection = Conexao; comando.CommandText = "SELECT CurrencyCode,Name FROM Sales.Currency"; SqlDataReader reader = comando.ExecuteReader(CommandBehavior.CloseConnection); while (reader.Read()) { ListBox1.Items.Add(Convert.ToString(reader["Name"])); }

Parmetros A utilizao dos classes de parametros do ADO.NET so um ponto importante no quesito segurana, pois eliminam o risco de injeo de SQL A classe parmetros permite que sejam criados parmetros para a execuo de instrues sql. Na instruo o parmetro deve ser identificado por @ mais um identificador nico. O objeto parmetro dever ter o mesmo nome o qual vai passar o valor. Vejamos o exemplo abaixo:

Dim comando As New SqlCommand comando.Connection = Conexao comando.CommandText = "SELECT * FROM Person.Contact " & _ " where ContactID = @ContactID" Dim parametro As New SqlParameter("@ContactID", SqlDbType.Int) parametro.Value = Convert.ToInt32("1") comando.Parameters.Add(parametro) Dim reader As SqlDataReader = comando.ExecuteReader(CommandBehavior.CloseConnection) GridView1.DataSource = reader GridView1.DataBind()

SqlCommand comando = new SqlCommand(); comando.Connection = Conexao; comando.CommandText = "SELECT CurrencyCode,Name FROM Sales.Currency"; SqlParameter parametro = new SqlParameter("@ContactID", SqlDbType.Int); parametro.Value = Convert.ToInt32("1"); comando.Parameters.Add(parametro); SqlDataReader reader = comando.ExecuteReader(CommandBehavior.CloseConnection); GridView1.DataSource = reader; GridView1.DataBind();

Primeiro instanciamos o objeto SQLParameter utilizando um de seus construtores. Existem sete sobrecargas. No exemplo, passado o nome do parmetro e o tipo. Em

114
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

seguida atribumos um valor ao parmetro, e finalmente o adicionamos a coleo de parmetros do comando. O objeto parametro no precisa ter o mesmo nome do campo da tabela

Se voc estiver usando outro provider, como o OleDb, os parametros devem ser identificados por ? . Os valores devem ser fornecidos na ordem em que eles esto no SQL, pois no h como nomealos

SQLDataAdapter , DataSet e DataTable A unica funo do SQLDataAdapter fazer a ligao entre a fonte de dados e o DataSet. Um DataAdapter, assim como um SQLDataSource, pode receber at quatro instrues SQL: Para consulta, incluso, exlcuso e alterao.

Existem quatro sobrecargas do contrutor de um DataAdapter. Se voc no quizer instanciar objetos connection e command, pode utilizar uma sobrecarga que recebe o comando sql de seleo e a string de conexo, que estes objetos so criados implicitamente.

O preenchimento de um DataSet por um DataAdapter feito atravs do mtodo fill:

Dim Adp As New SqlDataAdapter("SELECT * FROM Person.Contact ",_ Conexao) Dim Ds As New DataSet Adp.Fill(Ds) GridView1.DataSource = Ds GridView1.DataBind()

SqlDataAdapter Adp = new SqlDataAdapter ("SELECT * FROM Person.Contact ", Conexao); DataSet Ds = new DataSet(); Adp.Fill(Ds); GridView1.DataSource = Ds; GridView1.DataBind();

A atualizao dos dados feita atravs do mtodo update. Apenas quando o mtodo executado que qualquer alterao nos dados sero replicados ao banco de dados, pois, lembrando, o DataSet trabalha desconectado. 115
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Outro aspecto importante que o para fazer uma atualizao, seja excluso, incluso ou alterao, o Adapter precisa obter os comando SQL para tais operaes. Atravs da classe CommadBuilder podemos gerar automaticamente estas instrues para o SQLDataAdapter. No exemplo abaixo, o campo FirstName da tabela Person.Contact alterado para Gustavo II:

Dim Adp As New SqlDataAdapter("SELECT * FROM Person.Contact ",_ Conexao) Dim CmdBuilder As New SqlCommandBuilder(Adp) Dim Ds As New DataSet Ds.Tables(0).Rows(0).Item("FirstName") = "Gustavo II" Adp.Update(Ds)

SqlDataAdapter Adp = new SqlDataAdapter ("SELECT * FROM Person.Contact ", Conexao); SqlCommandBuilder CmdBuilder = new SqlCommandBuilder; DataSet Ds = new DataSet(); Ds.Tables[0].Rows[0]["FistName"] = "Gustavo II"; Adp.Update(Ds);

Como o DataSet um pequeno banco de dados em memria, podemos adicionar varias tabelas ao mesmo, inclusive de fontes diferentes. No exemplo a seguir dois objetos DataTable so preenchidos e depois adicionados a um mesmo DataSet.

Dim Adp1 As New SqlDataAdapter("SELECT * FROM Person.Contact ",_ Conexao) Dim Dt1 As New DataTable Adp1.Fill(Dt1) Dim Adp2 As New SqlDataAdapter("SELECT * FROM Person.ContactType ",_ Conexao) Dim Dt2 As New DataTable Adp2.Fill(Dt2) Dim Ds As New DataSet Ds.Tables.Add(Dt1) Ds.Tables.Add(Dt2)

SqlDataAdapter Adp1 = new SqlDataAdapter ("SELECT * FROM Person.Contact ", Conexao); DataTable Dt1 = new DataTable(); Adp1.Fill(Dt1); SqlDataAdapter Adp2 = new SqlDataAdapter ("SELECT * FROM Person.ContactType ", Conexao); DataTable Dt2 = new DataTable(); Adp2.Fill(Dt2);

116
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

DataSet Ds = new DataSet(); Ds.Tables.Add(Dt1); Ds.Tables.Add(Dt2);

Finalmente, neste ltimo exemplo adicionamos uma linha a uma tabela. Primeiramente preechemos a tabela atravs de um DataAdapter. Em seguida instanciamos um objeto DataRow a partir da tabela, ou seja, com sua definio de dados, preenchemos os valores dos campos, adicionamos a coleo de dados do DataTable invocamos o mtodo Update do Adapter para atualizar a fonte de dados: e finalmente

Dim Adp As New SqlDataAdapter("SELECT * FROM Sales.Currency ", Conexao) Dim CmdBuilder As New SqlCommandBuilder(Adp) Dim Dt As New DataTable Adp.Fill(Dt) Dim Dr As DataRow = Dt.NewRow Dr("CurrencyCode") = "BRU" Dr("Name") = "Brazilian UNReal" Dr("ModifiedDate") = "01/01/2006" Dt.Rows.Add(Dr) Adp.Update(Dt)

SqlDataAdapter Adp = new SqlDataAdapter ("SELECT * FROM Sales.Currency ", Conexao); SqlCommandBuilder CmdBuilder = new SqlCommandBuilder(Adp); DataTable Dt = new DataTable(); Adp.Fill(Dt); DataRow Dr = Dt.NewRow(); Dr["CurrencyCode"] = "BRU"; Dr["Name"] = "Brazilian UNReal"; Dr["ModifiedDate"] = "01/01/2006"; Dt.Rows.Add(Dr); Adp.Update(Dt);

Observe que neste ltimo exemplo sequer utlizamos um DataSet!

SQLTransaction O ADO.NET tambm possui classes que do suporte a controle de transaes. Devemos declarar uma transao e inici-la pelo objeto de conexo e ainda atribu-la aos objetos que faro parte da operao. Para confirmar as operaes chamamos o mtodo commit do objeto Transaction, para desfazer o mtodo rollback.

117
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

No exemplo abaixo, adaptado de exemplo anterior, criado um objeto SQLTransaction e atribudo a propriedade Transaction do comando insert do DataDdapter, que o comando utilizado para inserir um novo registro. O mtodo update do DataAdapter, que o mtodo que de fato atualiza a base de dados, chamado em um bloco protegido try..cacth. Se tudo der certo a transao confirmada. Caso algo de errado a transao desfeita.

Dim Trans As SqlTransaction = conexao.BeginTransaction Dim Adp As New SqlDataAdapter("SELECT * FROM Sales.Currency ",_ Conexao) Adp.InsertCommand.Transaction = Trans Dim CmdBuilder As New SqlCommandBuilder(Adp) Dim Dt As New DataTable Adp.Fill(Dt) Dim Dr As DataRow = Dt.NewRow Dr("CurrencyCode") = "BRU" Dr("Name") = "Brazilian UNReal" Dr("ModifiedDate") = "01/01/2006" Dt.Rows.Add(Dr) Try Adp.Update(Dt) Trans.Commit() Catch ex As Exception Trans.Rollback() End Try

SqlTransaction Trans = Conexao.BeginTransaction(); SqlDataAdapter Adp = new SqlDataAdapter( "SELECT * FROM Sales.Currency ", Conexao); Adp.InsertCommand.Transaction = Trans; SqlCommandBuilder CmdBuilder = new SqlCommandBuilder(Adp); DataTable Dt = new DataTable(); Adp.Fill(Dt); DataRow Dr = Dt.NewRow(); Dr["CurrencyCode"] = "BRU"; Dr["Name"] = "Brazilian UNReal"; Dr["ModifiedDate"] = "01/01/2006"; Dt.Rows.Add(Dr); try { Adp.Update(Dt); Trans.Commit(); } catch (Exception s) { Trans.Rollback(); }

118
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

10. LINQ
Como falamos nas sees iniciais deste curso, o LINQ, uma promessa antiga da Microsoft, veio para preencher o vazio existente entre a orientao a objetos e os bancos de dados relacionais.

Na verdade o LINQ foi um pouco alm disso, se tornando uma linguagem padro de manipulao de dados em diversos formatos. Existem trs forma de LINQ: LINQ para Objetos, LINQ para XML e LINQ para SQL.

Vamos agora fazer uma breve introduo ao LINQ para SQL. Crie uma nova aplicao ASP.NET 3.5, na caixa de dialogo Add New Item selecione LINQ to SQL Classes, de o nome da base de dados que ir utilizar, no meu Caso, NorthWind:

O VS sugere que o arquivo ser criado na pasta App_code, clique em Sim.

Abra o Server Explorer, conecte com o banco de dados que ir utilizar, expanda a pasta Tables: 119
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Arraste as tabelas que deseja utilizar para a rea especifica do arquivo dbml. No exemplo arrastei a entidade Customers e Orders. Note que o VS mapeou a tabela em duas classes, inclusive alterando o nome para Customer e Order. O VS tambm indiciou o relacionamento entre as classes:

120
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Agora v para o WebForm criado na sua aplicao. Na rea de design coloco que controle GridView, de um duplo clique sobre o formulrio para criar um manipular para o envento OnLoad do WebForm. Digite o seguinte cdigo:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim db As New NorthwindDataContext Dim consulta = From n In db.Customers Select n GridView1.DataSource = consulta GridView1.DataBind() End Sub

public partial class Default3 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { NorthwindDataContext db = new NorthwindDataContext(); var consulta = from n in db.Customers select n; GridView1.DataSource = consulta; GridView1.DataBind(); } }

Rode a aplicao e observe o resultado.

121
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

11. MemberShip e Roles


No ASP Clssico e em outras linguagem para web voc tinha que fazer todo o trabalho de gerenciamento de usurios e grupos: Criar usurios, paginas de logins, trocas de senhas, recuperao de senhas, autenticao, criao de grupos de usurios, gerenciamento de grupos alm de toda a estrutura de armazenamento necessria para isto tudo. Voc tambm tinha que programar toda a parte de autorizao de seu aplicativo: normalmente cada grupo de usurios estava restrito a um determinado numero de aes que poderiam ser executadas e ou paginas a qual ele poderia acessar.

Na primeira verso do ASP.NET muita coisa mudou, a programao de tudo isso citado no pargrafo anterior ficou um pouco mais fcil, mas ainda era preciso muito trabalho manual.

A partir do ASP.NET 2.0, um novo recurso denominado MemberShip, veio para tornar tudo isso muito mais fcil. Mais do que isso, para revolucionar o gerenciamento de usurio, grupos e permisses. Alm de uma srie de controles prontos para gerenciamento de usurios e autenticao, o ASP.NET pode agora cuidar do armazenamento de tudo isso automaticamente atravs de um banco de dados do SQLExpress ou em qualquer outra fonte de dados que voc quiser, inclusive o
Directory. Active

Definindo um Site para utilizar Forms Autentication Uma aplicao Web pode ser totalmente publica, com um porta de noticias, ou pode requerer autenticao, como um InternetBanking, ou ainda pode ser um misto de ambos: Um site de comrcio eletrnico onde voc navega e compra de forma annima e se autentica na hora do pagamento.

A autenticao em uma aplicao Web pode se dar de varias formas: Integrada com o Active Directory, onde podero ser utilizadas as credencias que o usurio logou no diretrio, Passport, que um servio pago mantido pela Microsoft e que j teve seu fim decretado, ou Forms, em que o usurio autenticado atravs de informaes digitadas em um formulrio. 122
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

A forma de autenticao na mais comum na internet Forms. Windows util por exemplo, em uma aplicao de Intranet, em que podemos aproveitar as credencias do usurio no Diretrio. Sugiro que voc acompanhe os exemplos passa a passo, j que uma etapa diretamente dependente da outra.

Ao criar uma nova aplicao ASP.NET, por padro ele no ter qualquer tipo de autenticao e seus acesso ser irrestrito.

Para conhecermos os conceitos crie uma aplicao com cinco WebForms: Administracao.aspx, Default.aspx, Login.aspx, NovoUsuario.aspx e TrocarSenha.aspx. Observe a aplicao na imagem abaixo:

Rode a aplicao e note que voc pode navegar livremente entre os formulrios. Preparando o Arquivo web.config

123
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Para definir autenticao Forms devemos fazer algumas alteraes no arquivo web.config como no exemplo abaixo: Voc pode fazer as alteraes necessrias no web.config atravs da ferramenta ASP.NET Configuration, que pode ser acionada atravs do cone no Solution Explorer.
<authentication mode="Forms"> <forms name=".ASPXAUTH" loginUrl="login.aspx" defaultUrl="default.aspx"> </forms> </authentication>

Voc esta informando ao ASP.NET que vai utilizar autenticao do tipo Forms, que o nome do cookie de autenticao utilizado ser .ASPXAUTH (padro), que o formulrio de autenticao ser login.aspx e que o formulrio padro ser default. Outras configuraes podem ser adicionadas a este n, estas exibidas so as mais relevantes.

Se voc rodar a aplicao agora perceber que ainda poder navegar livremente entre as pginas. O que deu errado? Embora voc tenha definido um mtodo de autenticao, voc ainda no restringiu o acesso de usurios anonimos a aplicao. Isso deve ser feito com a adio de uma de um n autorization, onde negamos acesso a usurios desconhecidos (no autenticados) representado pelo ? :
<authorization> <deny users="?" /> </authorization>

Ao final deste capitulo, apresento o web.config completo, da maneira que o seu dever estar aps todos os exemplos. Utilize-o para localizar onde determinada configurao deve se encaixar. No copie o arquivo inteiro.

Agora defina a pgina clientes como pgina inicial e rode a aplicao.

Voc deve observar duas coisas:

Voc foi redirecionado para a pgina login.aspx, pois a pgina definida para autenticao em nosso arquivo de configurao. 124
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Na URL, o ASP.NET adicionou a pgina inicial solicitada, de forma que voc possa ser redirecionado automaticamente aps a autenticao

Agora estamos prontos para autenticar o usurio. Porm antes de autentic-los precisamos cri-los, o que vamos ver a seguir.

Criando novos usurios com o controle CreateUserWizard Criamos uma pgina para criao de usurios, NovoUsuario.aspx. Em aplicaes este tipo de pagina normalmente tem seu acesso irrestrito, ou seja, usurios annimos podem entrar livremente e se cadastrarem. Porm como definimos autenticao por formulrios, nenhum usurio conseguir acess-las sem estar autenticado. Temos que torn-la publica, ou seja, de acesso annimo.

Precisar definir algumas paginas, ou diretrios inteiros, com acesso annimo e outras no algo comum, portanto algo que voc vai usar com freqncia em suas futuras aplicaes.

Para definirmos uma determinada pgina como publica basta adicionarmos um n location aps o n </system.web> j existente em nosso web.config, da seguinte forma:
<location path="NovoUsuario.aspx"> <system.web> <authorization> <allow users="*"/> </authorization> </system.web> </location>

Estamos definindo que a pgina NovoUsuario.aspx de acesso anonimo. Defina NovoUsuario.aspx como pgina inicial e rode a aplicao. Note que voc consegue 125
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

acessa-la normalmente, embora o restante da aplicao ainda lhe redirecione para o Login. Agora basta acionar um controle CreateUserWizard a nossa pgina de criao de usurios. Note que este controle possui dezenas de propriedades que permitem sua personalizao, inclusive a troca das mensagens e labels. No vamos entrar em detalhes porque quase tudo bem intuitivo, basta explorar o controle por alguns minutos. Rode novamente a aplicao e crie um novo usurio, preenchendo todos os campos obrigatrios, como na imagem abaixo:

Por padro, a senha deve conter no mnimo 7 caracteres, sendo no mnimo um caractere no alfanumrico ( # por exemplo). O ASP.NET informa que a criao do usurio ocorreu com sucesso.

126
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Antes de continuarmos, vamos entender o que o ASP.NET fez internamente. Primeiramente abra ao Solution Explorer, clique com o boto direito em cima da aplicao e clique em Refresh. Expanda o n data. Note que foi criado um banco de dados SQL Server Express (mdb).

De um duplo clique sobre o banco para abri-lo no Server Explorer. Note que foi criada toda a estrutura de tabelas necessrias para o gerenciamento de usurios, grupos e permisses:

127
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Se voc examinar a tabela aspnet_user, ver que o usurio criado esta armazenado nesta. Autenticando usurios com Login Criado nosso usurio, agora podemos autentic-lo. Para isso vamos utilizar o controle Login, encontrado tambm na barra de ferramentas de mesmo nome. Coloque um controle na pagina Login.aspx, defina a pagina default.aspx com pagina inicial e rode a aplicao.

128
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Se voc informou o usurio e senha corretamente ser redirecionado para a pgina Default e ter livre acesso a todas as demais pginas da aplicao. Trocando a senha com ChangePassword Outra funcionalidade pronta e encapsulada em um controle o ChangePassword. Para utiliz-lo adicione o mesmo a pagina TrocarSenha.aspx, defina esta como pagina inicial e rode a aplicao, aps o login voc redirecionado para uma troca de senha, onde voc deve informar a senha atual, a nova senha e a confirmao da nova senha:

Uma mensagem informa que a senha foi troca com sucesso:

129
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Criando um atalho para Login ou Logout com LoginStatus O controle LoginStatus permite criar um atalho para efetuar um login ou Logout do usurio. O controle possui duas visualizao: Logged Out, que deve ser definida em situaes em que o usurio no se encontra autenticado, e Logged In, quando o usurio j se autenticou no sistema, como voc pode ver na imagem abaixo:

Normalmente voc vai coloc-lo na visualizao Logged Out em reas publicas e como Logged In em reas autenticadas. Vamos test-lo das duas formas. Definimos anteriormente a pagina NovoUsuario.aspx como publica, portanto a mesma poder ser acessada sem autenticao. Coloque um controle LoginStatus nesta pagina com a viso Logged out, defina esta pagina como pgina inicial e rode a aplicao:

130
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Ao clicar em Login o usurio redirecionado para a pgina de login da aplicao. Agora vamos test-lo na viso Logged In. Coloque um controle LogginStatus na pgina default.aspx, defina sua viso como Logged In e defina esta pgina como inicial. Ao rodar a aplicao voc direcionado para o Login, pois default.aspx no permite acesso annimo. Aps a autenticao voc redirecionado para a pgina default, onde o controle pode ser visualizado:

131
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Clicando sobre o controle seu cookie de autenticao excludo, e voc passa a ser um usurio no autenticado, portanto a aplicao o redireciona para a pgina de login.

Informando o usurio autenticado com LoginName O controle LoginName permite que seja exibido em qualquer local o nome do usurio autenticado. Basta coloc-lo sobre a pgina. Abaixo voc pode ver o mesmo sobre a pgina default.aspx, acessada obviamente aps a autenticao:

Para personalizar a mensagem voc pode utilizar a propriedade FormatString, que por padro esta preenchida como {0}. Para exibir uma mensagem como Usurio Logado: Fernando basta alterar a propriedade da seguinte forma:

132
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Observe o resultado em tempo de execuo:

Se voc coloc-lo em uma pgina publica e acess-la sem autenticao, nada ser exibido. Recuperando senhas com PasswordRecovery O controle PasswordRecovery permite recuperar senhas esquecidas. Para utiliz-lo basta colocar o controle sobre a pagina. O usurio ter que informar o nome de usurio e responder a pergunta cadastrada durante a criao do usurio. A senha ser enviada para o E-mail tambm cadastrado durante a criao do usurio.

133
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Para testar o controle primeiro voc precisa informar um servidor smtp em seu arquivo web.config, a fim de enviar o e-mail, para isso adicione o seguinte n, logo aps o n location criado anteriormente:
<system.net> <mailSettings> <smtp from="fulano@portal.com"> <network host="smtp.portal.com" port="25" userName="user" password="123" /> </smtp> </mailSettings> </system.net>

Obviamente as informaes acima so fictcias, voc deve colocar informaes de um servidor smtp vlido. O prximo passo colocar um controle PasswordRecovery em sua pgina de login.aspx, que local mais apropriado por ser onde normalmente o usurio descobre que esqueceu a senha e tambm por ter acesso publico: Defina login.aspx como pgina inicial e rode a aplicao. Para recuperar a senha, primeiramente voc vai ter que informar o nome do usurio:

134
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Em seguida, deve responder a pergunta secreta cadastrada durante o login:

135
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Se tudo correr bem, a aplicao informa que o e-mail foi enviado:

136
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Ok, agora s abrir o e-mail. Voc vai receber uma mensagem semelhante a listada abaixo:

Please return to the site and log in using the following information. User Name: Fernando Password: rnaIrYqSBLAb|s

Bom, temos um problema. A senha retornada no nem parecida com a que voc cadastrou. o que deu errado?

O motivo simples: uma boa prtica armazenar senhas no forma de Hashs. Um hash um conjunto de caracteres obtidos atravs da aplicao de um algoritmo de criptografia sobre alguma informao. Um hash tem algumas caractersticas peculiares:

Tem tamanho fixo, ou seja, se voc aplicar um hash sobre a bblia ou sobre o seu nome, o tamanho do hash dever ser o mesmo.

137
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Deve ser nico, ou seja, nenhum hash gerado a partir de uma informao diferente deve ser igual a outro qualquer.

irreversvel. Ao contrrio da criptografia simtrica em que podem embaralhar alguns dados e fazer o caminho inverso, com um hash no podemos obter a informao original.

O uso de hash ideal para o armazenamento se senhas. No login, o sistema gera um hash a partir da senha informada e compara com o valor armazenado. A grande vantagem que a senha original no precisa ser armazenada, corremos menos riscos. A desvantagem que se o usurio esquecer a senha, a nica sada criar outra. Foi o que ASP.NET fez, gerou uma nova senha e enviou para o E-mail do usurio.

Opcionalmente voc pode alterar este comportamento, para que as senhas sejam armazenadas Criptografadas ou sem qualquer mecanismo de criptografia, porm recomendvel manter o comportamento padro do ASP.NET.

Conteudos para usurios anonimos e autenticados em uma mesma pgina comum tambm quereremos exibir para nossos usurios conteudos especificos conforme sua situao na Site. Por exemplo, em uma determinada parte da pgina, se o usurio esta logado exibimos seu nome de usurio, se no estiver logado, colocamos uma caixa de login.

O controle LoginView tem exatamente este objetivo. Ele formado de dois templates: Anonymous e LoggedIn. Para testa-lo abra a pagina NovoUsuario.aspx e coloque um LoginView, no template Anonymous coloque um controle Login, e no template LoggedIn coloque um controle LoginName Login.

Defina a pgina NovoUsuario.aspx como inicial e rode a aplicao. Note que exibido o conteudo do template Anonymous, pois o usurio ainda no efetuou login:

138
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Agora defina Login.aspx como pgina inicial, efetue o login e redirecione para NovoUsuario.aspx (digite a URL no navegador). Note que agora exibido o conteudo do template LoggedIn:

139
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Gerenciado usurios manualmente O ASP.NET prove ainda uma API com diversas classes que nos permitem fazer tudo o que foi estudado at o momento manualmente (e muito mais).

Para exemplificar, vamos listar na pgina Default.aspx todos os usurio do sistema em um ListBox atravs do mtodo GetAllUser. Para isso, adicione um Listbox a sua pagina e no evento Load da pgina escreva o seguinte cdigo:

If Not Page.IsPostBack Then ListBox1.DataSource = Membership.GetAllUsers ListBox1.DataBind() End If

140
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

if (!Page.IsPostBack) { ListBox1.DataSource = Membership.GetAllUsers(); ListBox1.DataBind(); }

Listar todas as classes com seus mtodos e exemplos requer um curso inteiro, por isso vou listar abaixo as principais classes e seus membros mais importantes, com suas respectivas funes: Classe MemberShip Funes especificas de gerenciamento de usurios. CreateUser: Permite Criar um novo usurio. DeleteUser: Permite excluir um usurio. FindUserByEmail: Retorna uma coleo de usurios com o E-mail especificado. GeneratePassword: Gera uma senha aleatria. GetAllUsers: Retorna uma coleo de usurios. GetUserNameByEmail: Retorna um usurio cujo E-mail equivale ao especificado. UpdateUser: Atualiza o usurio. ValidateUser: Verifica se o usurio e sua senha so vlidos. 141
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Classe MemberShipUser Trs informaes especificas de um usurio

CreationDate: Data e hora em que o usurio foi criado. Email: Retorna ou determina o E-mail do usurio. IsOnLine: Retorna se o usurio esta on-line.
LastActivityDate: Retorna a data e hora da ltima atividade do usurio LastLoginDate: Retorna a data do ultimo login do usurio.

Autorizao e Funes At agora vimos alguns mtodos de gerenciamento de usurios. Porm normalmente usurios tm funes diferentes em um negcio, e sua aplicao dever ser capaz de gerenciar isto. Embora neste quesito j no existam controles prontos, o gerenciamento de funes tambm muito mais fcil e rpido no ASP.NET 3.5.

Para testarmos o gerenciamento e uso de funes vamos executar as seguintes tarefas:

Criar um cadastro de funes em nossa pgina Default.aspx. Cadastrar a funo admin.

Criar um controle de atribuio de funes a usurios tambm na pagina Default. Adicionar seu usurio a esta funo.

Definir que nossa pgina administracao.aspx s poder ser acessada por um usurio pertencente a funo admin.

Testar a aplicao.

Criando um cadastro de Funes Antes de tudo devemos habilitar o gerenciamento de funes em nossa aplicao, que por padro desabilitado. Para isso adicione o seguinte n dento de <system.web>:
<roleManager enabled="True"/>

142
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Agora adicione a pgina Default.aspx um controle textbox com um rtulo Grupo e um button com um rtulo adicionar logo ao lado. Adicione tambm um novo controle ListBox (j deve existir um para exibio de usurios) com o rtulo Funes. Sua pgina, em tempo de design, deve se parecer com a imagem abaixo.

Agora vamos adicionar algumas linhas de cdigo. Altere seu mtodo Load da pagina de acordo com a listagem abaixo:

If Not Page.IsPostBack Then ListBox1.DataSource = Membership.GetAllUsers ListBox1.DataBind() Roles_DataBind() End If

if (!Page.IsPostBack) { ListBox1.DataSource = Membership.GetAllUsers(); ListBox1.DataBind(); Roles_DataBind(); }

Crie um mtodo Roles_dataBind, que atualiza as funes no listbox:

143
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Sub Roles_DataBind() ListBox2.DataSource = Roles.GetAllRoles ListBox2.DataBind() End Sub

void Roles_DataBind() { ListBox2.DataSource = Roles.GetAllRoles(); ListBox2.DataBind(); }

Agora de um duplo clique sobre o boto Incluir, e sobre o manipulador de evento criado adicione o seguinte cdigo:

Roles.CreateRole(TextBox1.Text) Roles_DataBind()

Roles.CreateRole(TextBox1.Text); Roles_DataBind();

Tudo o que foi feito adicionar uma nova funo a partir do texto informado no controle textbox. Rode a aplicao, informe admin como nome para a funo clique em Incluir:

144
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Criando um controle de atribuio de funes a usurios Para adicionar uma funo a um usurio, vamos verificar o usurio selecionado, a funo seleciona e em seguida fazer a adio, tudo atravs do clique de um boto Adicionar Funo. Para exibir a funo de um determinado usurio, um clique em outro boto Funes do Usurio devera exibir em um listbox as funes atribudas ao usurio selecionado.

Primeiramente adicione ao seu WebForm default.aspx um boto de texto Adicionar Funo, um boto de texto Funes do Usurio ao lado do listbox de usurios, e um novo listbox abaixo deste boto. Seu formulrio agora dever se parecer com a imagem abaixo:

145
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Agora um pouco de cdigo. No manipulador do evento do boto Adicionar Funo coloque:

Roles.AddUserToRole(ListBox1.SelectedItem.Text,_ ListBox2.SelectedItem.Text)

Roles.AddUserToRole(ListBox1.SelectedItem.Text, ListBox2.SelectedItem.Text);

J para o boto Funes do usurio:

ListBox3.DataSource = Roles.GetRolesForUser(ListBox1.SelectedItem.Text) ListBox3.DataBind()

146
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

ListBox3.DataSource = Roles.GetRolesForUser(ListBox1.SelectedItem.Text); ListBox3.DataBind();

O que o cdigo acima faz simplesmente pegar as funes do atribudas ao usurio selecionado no Listbox1 e listadas no listbox3.

Rode a aplicao e adicione a funo admin ao seu usurio:

147
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Definindo que nossa pgina Administracao.aspx s poder ser acessada por um usurio pertencente a funo admin Para que apenas usurios do grupo admin possam acessar a pgina Administracao.aspx, tudo a fazer adicionar um novo n location em nosso web.cofig, da seguinte forma:
<location path="Administracao.aspx"> <system.web> <authorization> <allow roles="admin"/> <deny users="*"/> </authorization> </system.web> </location>

Observe que a estrutura do n semelhante a utilizada anteriormente para tornar a pgina NovoUsuario.aspx, porm aqui ao invs de autorizarmos um usurio estamos autorizando uma funo, e negando acesso a todos os demais usurios. Para testar crie um novo usurio e no o adicione a funo admin, faa o login com o mesmo e tente acessar a pagina Administracao.aspx. Faa o mesmo com seu usurio que foi includo na funo admin.

Arquivo web.config

Abaixo segue o arquivo web.config final, utilizado em nossos exemplos at aqui. Apenas comentrios foram removidos por praticidade.
<?xml version="1.0"?> <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> <appSettings/> <connectionStrings/> <system.web> <compilation debug="true" strict="false" explicit="true"/> <pages> <namespaces> <clear/> <add namespace="System"/> <add namespace="System.Collections"/> <add namespace="System.Collections.Specialized"/> <add namespace="System.Configuration"/> <add namespace="System.Text"/> <add namespace="System.Text.RegularExpressions"/> <add namespace="System.Web"/> <add namespace="System.Web.Caching"/> <add namespace="System.Web.SessionState"/> <add namespace="System.Web.Security"/>

148
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

<add namespace="System.Web.Profile"/> <add namespace="System.Web.UI"/> <add namespace="System.Web.UI.WebControls"/> <add namespace="System.Web.UI.WebControls.WebParts"/> <add namespace="System.Web.UI.HtmlControls"/> </namespaces> </pages> <roleManager enabled="True"/> <authentication mode="Forms"> <forms name=".ASPXAUTH" loginUrl="login.aspx" defaultUrl="default.aspx"> </forms> </authentication> <authorization> <deny users="?"/> </authorization> </system.web> <location path="Administracao.aspx"> <system.web> <authorization> <allow roles="admin"/> <deny users="*"/> </authorization> </system.web> </location> <location path="NovoUsuario.aspx"> <system.web> <authorization> <allow users="*"/> </authorization> </system.web> </location> <system.net> <mailSettings> <smtp from="fulano@portal.com"> <network host="smtp.portal.com" port="25" userName="user" password="123" /> </smtp> </mailSettings> </system.net> </configuration>

MemberShip e Roles, algumas tcnicas avanadas

Agora veremos alguns recursos avanados de MemberShip e Roles disponveis no ASP.NET 3.5. Por padro, o ASP.NET cria um banco de dados SQL Express de nome ASPNETDB.MDF em App_Data com todos os objetos necessrio para a gerenciamento de memberships e roles. O cenrio pode ser visualizado na figura 1:

149
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Com certeza uma alternativa prtica, porm temos aqui alguns problemas: Seu site provavelmente vai ter um banco de dados de aplicao. Voc ter ento dois bancos de dados independentes para uma mesma aplicao! Provavelmente alguma regra de negcio de seu aplicativo vai precisar interagir de alguma forma com a base de dados de membership e roles, como numa auditoria, por exemplo. Sua aplicao vai ter que buscar estar informaes em outro banco de dados, em outro SGBD!

Por padro o banco de dados de gerenciamento estar junto ao Servidor de Internet. Voc pode querer coloc-lo em um servidor de banco de dados dedicado, ou mesmo sequer deseja instalar o SQL Server junto ao Servidor Web. Um banco de dados SQL Server edio Express possui algumas limitaes tcnicas.

A boa noticia que o ASP.NET permite que seja utilizado nosso prprio banco de dados para o gerenciamento de membership e roles, como exibido na figura 2. Fazer isso simples, e basicamente deve ser feito em duas etapas:

Criar os objetos necessrios no seu banco de dados: O gerenciamento de memberships e roles feito atravs de um conjunto especifico de tabelas, views e stored procedures, que devero ser de alguma maneira criados no seu banco de dados. 150
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Configurar a sua aplicao para usar seu banco de dados: Devemos configurar a aplicao para que faa o gerenciamento de usurios e funes no mais atravs do banco de dados padro, utilizando o nosso banco de dados ao invs disso. Criando os Objetos Voc pode criar os objetos necessrios diretamente no seu banco de dados ou ento produzir um script DDL com os mesmos.

O .NET possui a Ferramenta ASP.NET SQL Server SetupWizard que pode ser utilizado tanto para cri-los ou mesmo para produzir o script.

Gerando os objetos diretamente no seu banco de dados Para gerar o schema diretamente no seu banco de dados, basta rodar o aplicativo ASP.NET SQL Server SetupWizard (ASPNET_REGSQL), que pode ser encontrado no caminho C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 , ou executado mais facilmente atravs do Visual Studio 2008 Command Prompt que pode ser encontrado no conjunto de programas do Visual Studio. No prompt de comando basta digitar ASPNET_REGSQL.

A primeira tela do programa traz algumas informaes sobre a criao dos objetos:

151
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Na segunda etapa devemos informar se desejamos preparar nossa aplicao ou remover as configuraes, obviamente vamos optar pela primeira opo:

Em seguida devemos informar o servidor, o banco de dados e as informaes de login para a criao dos objetos:

152
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Em seguida um sumrio das configuraes exibido:

Por fim o aplicativo informa que os objetos foram criados:

153
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Se examinarmos o banco de dados, podemos ver que foram criadas diversas tabelas, procedures e views especficas para o uso do ASP.NET:

154
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Gerando um Script Alm do wizard exibido anteriormente, atravs do mesmo aplicativo, porm atravs da linha de comando, podemos produzir um script DDL.

Se voc for distribuir o banco de dados de sua aplicao atravs de um script, provavelmente voc acharia timo incluir tambm o script para criao dos objetos de Membership e Roles. Podemos gerar o script para um arquivo, informando quais funcionalidades desejamos utilizar.

Por exemplo, para gerarmos um script com toda a funcionalidade para um arquivo de nome ASPScript.SQL, basta executar o seguinte comando:
ASPNET_REGSQL sqlexportonly C:\ASPScrip.sql -A all

Ser gerado o script no arquivo C:\ASPScrip.sql com todas as funcionalidades includas. Para mais opes digite o comando
ASPNET_REGSQL -?

Configurando sua aplicao Criar os objetos necessrios em seu banco de dados no o suficiente. Se o ASP.NET no souber que voc deseja que as funcionalidades de Membership e Roles sejam armazenadas em seu prprio banco de dados, ele vai continuar a usar o arquivo SQLExpress na pasta App_Data.

Tudo a fazer incluir algumas entradas no arquivo web.config de sua aplicao:


<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15"> <providers> <add name="SqlProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="MinhaString" applicationName="MinhaAplicacao" enablePasswordRetrieval="false" enablePasswordReset="true" passwordFormat="Hashed" requiresQuestionAndAnswer="true" minRequiredPasswordLength="1" minRequiredNonalphanumericCharacters="0"/> </providers>

155
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

</membership>

Acima configuramos as funcionalidades de MemberShip, observer o n provider, o atributo name tem o valor de SqlProvider, Outro atributo type como

System.Web.Security.SqlMembershipProvider.

importante

ConnectionStringName, que deve apontar para um string de conexo no mesmo arquivo web.config contendo as informaes do servidor e banco de dados onde dever estar a estrutura de gerenciamento de membership. Para exemplificar, a string de conexo MinhaString poderia ser adiciona no web.config da seguinte forma:

<connectionStrings> <add name="MinhaString" connectionString="Data Source=Servidor;Initial Catalog= AdventureWorks;User ID=sa;Password=123" providerName="System.Data.SqlClient"/> </connectionStrings>

Para o gerenciamento de Roles devemos adicionar um n roleManager, semelhante ao anterior:


<roleManager defaultProvider="SqlProvider" enabled="true" cacheRolesInCookie="true" cookieName=".ASPROLES" cookieTimeout="30" cookiePath="/" cookieRequireSSL="false" cookieSlidingExpiration="true" cookieProtection="All"> <providers> <add name="SqlProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="MinhaString" applicationName="MinhaAplicacao"/> </providers> </roleManager>

Observe novamente as informaes de name do provedor, tipo e string de conexo. Os recursos de membership e roles foram sem duvida uma grande novidade no ASP.NET 3.5. Poder direcionar suas funcionalidades para um banco de dados especifico torna este recurso ainda mais funcional e til!

156
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

12 .Manuteno de Estado
Em aplicao que no mantm estado por natureza, como nossas aplicaes web, utilizamos alguns mecanismos para manter as informaes importantes para nosso negocio entre uma requisio e outra. O IIS por sua vez incorpora um cookie com um identificador nico no cabealho de cada requisio http, que enviada de volta pelo navegador. Esse cookie que torna possvel identificar um mesmo usurio entre os diversos vai e volta de uma aplicao Web.

Desta forma a cada requisio poderamos gravar em um banco de dados s informaes importantes daquele momento, vamos supor o nome do usurio. Na prxima requisio pegamos novamente este identificador nico e faramos uma consulta em no banco de dados, j saberamos de qual usurio se trata, poderamos ento armazenar neste momento as informaes de um produto que o usurio resolver comprar e assim a vida seguiria tranquilamente.

Esta uma forma primitiva e rdua de manter estado, existem diversas outras tcnicas, todas com seus prs e contras, o que vamos estudas nas prximas sesses.

Profiles Manter informaes em variveis de sesso um dos recursos mais simples e utilizados para manter o estado de uma aplicao Web: Armazenamos as informaes importantes em variveis de sesso. A aplicao faz automaticamente a associao entre o Identificador nico explicado na sesso anterior e as varias de sesso do mesmo.

No ASP.NET 2.0 o recurso de personalization tornou isso mais fcil. Agora, podemos gerenciar informaes de forma mais intuitiva e fcil, com ajuda inclusive do Intelissense.

Um exemplo simples Vamos comear com um exemplo simples, para isso crie uma aplicao ASP.NET. Esta aplicao ser usada durante todos os exemplos deste capitulo.

157
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Crie duas pginas em sua aplicao: Inicial.aspx e Final.aspx. Na primeira coloque um controle TextBox e um Controle Button de texto Enviar e na outra um controle label.

Altere seu arquivo web.config, incluindo um n profile da seguinte forma:


<profile> <properties> <add name="Nome"/> </properties> </profile>

Ao final deste capitulo voc pode encontrar o web.config na sua verso final.

De um duplo clique no boto Enviar e adicione o seguinte:

Profile.Nome = TextBox1.Text Response.Redirect("Final.aspx")

Profile.Nome = TextBox1.Text; Response.Redirect("Final.aspx");

No evento Load da pagina Final.aspx:


Label1.Text = Profile.Item("Nome")

Label1.Text =Convert.ToString( Profile["Nome"]);

Note que o qualquer propriedade que voc definir no profile estar disponvel no intellisense:

158
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Turbinando a propriedade Voc pode ainda definir algumas caractersticas de uma propriedade de um profile, como tipo e valores padro. Veja o web.config anterior agora com a propriedade nome definida como string e com valor padro igual a Annimo:
<profile> <properties> <add name="Nome" type="System.String" defaultValue="Annimo" </properties> </profile>

/>

Definindo Grupos Outra funcionalidade organizarmos nossas propriedades em grupos. No nosso exemplo vamos adicionar um grupo Endereco, para armazenar o logradouro, nmero, cidade e estado do usurio:
<profile> <properties> <add name="Nome" type="System.String" defaultValue="Annimo" <group name="Endereco"> <add name="Logradouro"/> <add name="Numero"/> <add name="Cidade"/> <add name="Estado"/> </group> </properties> </profile>

/>

Adicione mais trs controles textbox na pagina Inicial.aspx para que o usurio digite estas novas propriedades:

159
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Altere o cdigo do boto enviar de acordo com o exemplo a seguir:

Profile.Nome = TextBox1.Text Profile.Endereco.Logradouro = TextBox2.Text Profile.Endereco.Numero = TextBox3.Text Profile.Endereco.Cidade = TextBox4.Text Profile.Endereco.Estado = TextBox5.Text Response.Redirect("inicial.aspx")

Profile.Nome = TextBox1.Text; Profile.Endereco.Logradouro = TextBox2.Text; Profile.Endereco.Numero = TextBox3.Text; Profile.Endereco.Cidade = TextBox4.Text; Profile.Endereco.Estado = TextBox5.Text; Response.Redirect("inicial.aspx");

J nosso evento Load na pgina Final.aspx devera ficar assim:

Label1.Text = Profile.Nome & " " & _ Profile.Endereco.Logradouro & " " & _ Profile.Endereco.Numero & " " & _ Profile.Endereco.Cidade & " " & _ Profile.Endereco.Estado

160
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Label1.Text = Profile.Nome + " " + Profile.Endereco.Logradouro + " " + Profile.Endereco.Numero + " " + Profile.Endereco.Cidade + " " + Profile.Endereco.Estado;

Session Como explicado algumas sesses atrs, uma das formas mais simples de manuteno de estado atravs de variveis de sesso. Cada varivel esta associada ao cookie de identificao do usurio. Por padro, estas informaes esto armazenadas no prprio processo do ASP.NET. Uma novidade da era .NET foi a possibilidade de armazenamento de informaes de sesso em um processo separado (um servidor de estado) ou at mesmo em um SGBD. Isto trouxe novos horizontes ao desenvolvimento de aplicaes Web em ASP.NET, pois simplificou a criao dos chamados Web Farms, termo que define um conjunto de servidores rodando uma aplicao especifica. Em nosso curso vamos estudar apenas o gerenciamento de sesso no prprio processo do ASP.NET (inProc), que o comportamento padro.

Uma varivel de sesso esta associada a exclusivamente a uma nica sesso. Isto significa que um dado armazenado em uma varivel de nome X para o usurio Joo no ser visvel na varivel de sesso de mesmo nome do usurio Pedro, e vice-versa.

Para testarmos o uso de variveis de sesso, vamos criar uma pequena aplicao que vai armazenar um valor em uma varivel e exibi-lo em outra pgina. Em seguida vamos rodar uma outra instancia da mesma aplicao para verificar que os valores armazenados diferem de uma instancia para outra. Para isso crie uma nova aplicao ASP.NET com duas pginas: Inicial.aspx e Final.aspx. Na primeira coloque um controle TextBox e um Controle Button de texto Enviar e na outra um controle label.

De um duplo clique sobre o boto enviar e no manipulador de evento criado insira o seguinte cdigo:

Session("Nome") = TextBox1.Text Response.Redirect("Final.aspx")

161
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Session["Nome"] = TextBox1.Text; Response.Redirect("Final.aspx"); No evento Load da pgina Final.aspx insira a cdigo abaixo:

Label1.Text = Session("Nome")

Label1.Text = Session["Nome"];

O identificador de uma varivel de sesso sensvel a diferenciao entre letras maisculas e minsculas, portanto Nome representa uma varivel e nome outra.

Defina Inicial.aspx como pagina inicial, rode a aplicao, digite um valor na caixa texto e observe o valor ser exibido na pgina seguinte.

Voc tambem pode armazenar qualquer tipo de objeto em uma variavel de sesso.

HiddenField Uma das formas mais simples e antigas de manter estado dentro de uma mesma pgina atravs de campos ocultos. O valor atribudo ao controle mantido na propriedade value entre post backs, porm no renderizado na pgina.

ViewState Imagine a seguinte situao: em um determinado ponto de um cadastro o usurio, aps informar diversos dados cadastrais, tem que digitar o CEP para que o sistema faa a busca do endereo. O post back acionado e quando a requisio volta ao navegador, todos os dados digitados se perderam em algum lugar do cyberspace. Claro que

ninguem vai criar um aplicativo com desta forma, porm o exemplo para lembrar que no ASP classico e em outras diversas linguagens de programao para Web, devemos manter o estado da pgina manualmente, ou seja, digitando muitas linhas de cdigo. No ASP.NET o recurso de ViewState mantem automaticamente os valores de controles de servidor entre um post back e outro. Na verdade o ViewState internamente nada mais 162
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

do que uma campo oculto um pouco mais sofisticado. Se voc rodar uma aplicao ASP.NET sem qualquer controle ver que criado um campo oculto para o armazenamento do ViewState:
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNzgzNDMwNTMzZGS8mO25pQR00V4slvgSxG3dEvK+hA==" />

Note que os dados no so exibidos em texto plano, por questes de segurana. Porm este um recurso palhativo e no devemos utiliz-lo para manter dados sensveis.

Voc ainda pode usar o ViewState para adicionar manualmente valores ao ViewState, lembrando que voc vai conseguir recuper-los apenas entre um post back e outro na mesma pgina. Abaixo um pequeno exemplo de atribuio de um valor ao ViewState:

ViewState("Nome") = "Fernando Amaral"

ViewState["Nome"] = "Fernando Amaral";

QueryString Outro modelo clssico de manuteno de estado o atravs do uso de querystrings, que nada mais so do que conjuntos de pares/valores anexados a URL, provavelmente voc j deve ter visto dezenas de pginas usando este recurso.

Sua utilizao simples, aps a URL voc adiciona o primeiro valor na forma ?Chave=Valor. Para passar mais de um conjunto, os mesmos devem ser concatenados atravs do caractere &. Para recuperar o valor na outra pgina basta usar Request.QueryString.

Crie uma nova aplicao ASP.NET com duas pginas: Inicial.aspx e Final.aspx. Na primeira coloque dois controles TextBox, um para digitao do nome e outro para idade e um Controle Button de texto Enviar e na outra um controle label.

Para montar a URL de redirecionamento com as duas variveis:

Response.Redirect("Final.aspx?" & "Nome=" & TextBox1.Text & "&Idade="

163
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

& TextBox2.Text)

Response.Redirect("Final.aspx?" + "Nome=" + TextBox1.Text + "&Idade=" + TextBox2.Text);

Para recuperar os valores na pagina seguinte:

Label1.Text = Request.QueryString("Nome") & " " & Request.QueryString("Idade")

Label1.Text = Request.QueryString["Nome"] + " " + Request.QueryString["Idade"];

Cookies Outra forma de manuteno de estado atravs do uso de cookies, que nada mais do que um pequeno arquivo de texto que armazenado na maquina do usurio. Sua grande vantagem que voc pode identificar o usurio mesmo dias depois de seu acesso a pgina. Este recurso muito usado, pro exemplo, em sites de comercio eletrnico, para exibir as preferncias do usurio os ltimos produtos que ele navegou.

O grande problema dos cookies que o usurio simplesmente pode desabilitar este recurso em seu navegador. Cross Page Postback Uma nova funcionalidade do ASP.NET a partir da verso 2.0 capacidade de recuperao de informaes entre diferentes pginas. Este recurso j foi visto em nosso primeiro mdulo.

Application Semelhante em diversos aspectos com variveis de sesso, com uma importante diferena: As variveis de aplicao so compartilhadas entre todas os usurios da aplicao. Uma varivel de aplicao esta associada a toda a aplicao. Isto significa que um dado armazenado em uma varivel de nome X para o usurio Joo ser visvel na varivel de aplicao de mesmo nome do usurio Pedro, e vice-versa.

164
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Outra diferena importante que uma varivel de aplicao estar disponvel durante toda a vida da aplicao, enquanto uma varivel de sesso ser perdida ao fim da sesso do usurio. Crie uma nova aplicao ASP.NET com duas pginas: Inicial.aspx e Final.aspx. Na primeira coloque um controle TextBox para digitao do nome e um Controle Button de texto Enviar e na outra um controle label.

Na pgina Incial.aspx digite o seguinte cdigo no manipulador de evento criado no boto Enviar (observe que no h redirecionamento):

Application("Nome") = TextBox1.Text

Application["Nome"] = TextBox1.Text;

No evento Load da pagina Final.aspx digite o seguinte cdigo:

Label1.Text = Application("Nome")

Label1.Text = Application["Nome"];

Para testar, defina Inicial.aspx como pgina inicial, informe seu nome e clique no boto enviar. Feche a aplicao e v tomar um copo de gua. Na volta, defina Final.aspx como pagina inicial, rode a aplicao e observe o resultado. Voc pode ser perguntar como foi possvel recuperar o valor j que ningum estava usando a aplicao em determinado momento. Na verdade, mesmo que ningum utiliza a aplicao, os valores de variveis de aplicao s sero perdidos quando a ltima sesso expirar.

Caching Aplicaes web podem ter de atender centanas de milhares de usurios, e temos que usar todos os recursos disponveis para mante-la rodando com uma boa performance.

Normalmente alguns recursos so exibidos a diferentes usurios sem sequer que tenha havido tempo para estas informaes serem alteradas. De qualquer forma, se nada for 165
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

feito, a cada acesso a aplicao vai novamente buscar essas informaes onde quer elas estejam. Para citar um exemplo, se seu aplicativo em uma pagina de cadastro exibe uma relao de cidades em um ComboBox para que o usurio faa a escolha de uma. A cada novo usurio sua aplicao vai abrir uma conexo com o banco de dados, executar a consulta e preencher o ComboBox. Qual o custo desta tarefa para sua aplicao? Qual a probabilidade da relao de cidades mudar nas proximas horas? O ASP.NET nos oferece diversos recusos de armazenamento em cache, vamos estadalos a seguir. Output Caching A adico de uma diretiva de compilao em uma pgina ASP.NET j vai colocar a pgina em cache. Para fazer um teste, coloque a diretiva a seguir logo abaixo da diretiva @Page:
<%@ OutputCache Duration="30" VaryByParam="None" %>

Coloque um label em sua pgina e no evento Load digite o cdigo abaixo:

Label1.Text = DateTime.Now.ToString

Label1.Text = DateTime.Now.ToString();

Rode a aplicao. Observe a hora exibida. Pare a aplicao e rode novamente ou simplismente atualize a pgina. Veja que a hora continua a mesma, sem atualizao.

Aguarde em torno de 30 segudos, que foi o tempo de durao informado na diretiva e rode a aplicao novamente. Observe que a hora atualizada.

Variao por Parametros O atributo VaryByParam, utilizado no exemplo anterior nos permite criar verses diferentes para variaes de determinado parmetro na Query String da aplicao.

Para exemplificar, no exemplo anterior altera a diretiva da seguinte maneira:

166
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

<%@ OutputCache Duration="30" VaryByParam="Codigo" %>

Rode a aplicao e adicione a ?Codigo=1 ao final da Url, como no exemplo abaixo:

Memorize a hora, altere o cdigo para 2 e tecle Enter. Note que hora mudou. Volte o valor do parmetro para 1 e tecle Enter. Note que exibido a hora anterior, ou seja, que estava armazenada em cach.

Voc pode especificar o armazenamento por mais de um parmetro, bastando para isso informa-los separados por ; . O armazenamento se dar sempre pela combinao de todos os parmetros, ou seja, sempre que surgir uma nova combinao de valores, um novo armazenamento ser gerado. Para que seja aplicado cache a todos os parmetros, basta informa * . VaryByControl Atravs do atributo VaryByControl, podemos definir que determinado controle da pgina seja armazenado em cach, bastando para tanto informar o nome do mesmo:
<%@ OutputCache Duration="30" VaryBycontrol="Label1" %>

O uso de VaryByControl ideal para o armazenamento de User Controls.

Substitution

167
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

As vezes queremos manter em cache a pgina inteira, porem determinada informao precisa ser dinmica e variar de usurio pra o usurio ou mesmo em funo do tempo. Um bom exemplo exibir a hora atualizada pro usurio, ou mesmo seu nome de login.

O ASP.NET disponibiliza para isso um controle Subtituton, que recebe na sua propriedade MetodName o nome de um mtodo que ser dinmico, ou seja, no ser armazenado em cache. Este mtodo deve deve ser shared /static e receber como parmetro um tipo HttpContext.

Adaptar o nosso primeiro exemplo, em que exibimos a data e hora em label, para ter uma poro da pgina exibindo a hora sem armazendo em cache, utilizando um Substitution, facil. Primeiramente adicione a seguinte funo a pgina:

Public Shared Function RetornaHora(ByVal context As HttpContext) _ As String Return DateTime.Now.ToString() End Function

public static string RetornaHora(HttpContext context) { return DateTime.Now.ToString(); }

Em seguida acione um controle Subtitutio e denina sua propriedade MethodName como RetornaHora.

Rode a aplicao. Atualize a pgina algumas vezes e note que o Label colocado anteriormente mantem fixo o valor da hora enquato o cache no espira. J o controle Substitution renderiza a data e hora atualizados.

168
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Programando cache manualmente Para poder aproveitar o Maximo da funcionalidade de cache, voc pode programar a sua utilizao. O funcionamento bsico semelhante ao de variveis de sesso e aplicao, basta ler ou gravar o valor atravs de um identificador nico:

Cache("Nome") = "Fernando"

Cache["Nome"] = "Fernando";

Outra maneira de utilizar cache usando o mtodo Insert. O primeiro parmetro o identificador, o segundo o abjeto a ser armazenado:

Cache.Insert("Nome", "Fernando")

Cache.Insert("Nome", "Fernando");

O mtodo Insert possui ainda algumas sobrecargas, que permitem criar dependncias, ou determinar o tempo de expirao do cache. O tempo de expirao pode ser absoluto, onde voc deve informar a hora exata em que o cache vai expirar, ou sliding, em que 169
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

voc informa o tempo de expirao a partir da criao do cache. O exemplo abaixo coloca um string em cache por 20 segundos:

Cache.Insert("Nome", "Fernando", Nothing, DateTime.MaxValue,_ TimeSpan.FromSeconds(20))

Cache.Insert("Nome","Fernando", null, DateTime.MaxValue, TimeSpan.FromSeconds(20));

170
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

ASP.NET AJAX
Antes de tentarmos entender o Ajax, preciso conhecer a Web 2.0 e onde o Ajax se encaixa neste conceito.

Web 2.0 Embora a Web seja algo revolucionrio e tecnologicamente inovador, na verdade hoje ela esta passando pela sua pr-histria . Fazendo-se uma analogia, podemos pensar na

revoluo que foi a produo da TV em escala industrial l pela dcada de 40, com baixssima qualidade, preto e branca com a TV digital que esta surgindo nos dias de hoje. A Web atual uma TV da dcada de 40.

J muito se fala em Web 2.0, que seria a segunda gerao de aplicaes para Internet, onde a Internet passaria a ser a plataforma das aplicaes, acessadas inteiramente atravs de navegadores: mais interativas, mas leves, mas dinmicas...

Mas aonde o Ajax entra nisso tudo? O Ajax a tecnologia que torna possvel trazer muitos dos conceitos da Web 2.0 para as aplicaes de fato. O Ajax o responsvel pela caracterstica de interatividade e interfaces ricas e amigveis da Web 2.0.

Ajax Quando ensino ASP.NET para programadores que nunca criaram uma aplicao Web, noto que alguns tem dificuldades em entender o diferente modelo de funcionamento de uma aplicao Internet: O que estamos vendo no browser o resultado de um requisio processada por uma aplicao no servidor. Em nosso navegador, cada vez que enviamos uma requisio de processamento, todo contedo empacotado, enviado e processado pelo servidor e em seguida devolvido ao navegador, que trata de interpretar e exibir este resultado novamente para o usurio.

O problema que, a cada requisio, a pgina inteira trafega entre o servidor e o cliente. Isto nos trs alguns problemas: Trafego desnecessrio na rede, maior carga de processamento, tempo de espera pelo processamento da requisio.

171
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

A idia do Ajax, acrnimo para Asynchronous JavaScript and XML, permitir que apenas a parte necessria da pgina seja enviada e processada no servidor: um modelo de funcionamento assncrono: isto quer dizer que o usurio no precisa esperar o final do processamento da requisio para continuar executando a aplicao...note agora que o benefcio muito maior do que apenas evitar que a pgina pisque: reduo de trfego, aumento de desempenho, maior interatividade.

Embora o acrnimo fale apenas em JavaScript e XML, temos diversas outras tecnologias envolvidas quando usamos Ajax: CSS, DOM e XMLHttpRequest. A requisio ao Ajax ao servidor na forma de um objeto XMLHttpRequest. Aps processada, o resultado em XML processado pelo cliente, onde apenas as alteraes so exibidas. Nada de Novo curioso o fato de que muitas tecnologias j existentes a muito tempo, s vezes dcadas, de repente se tornam a sensao do momento: Orientao a Objetos, infra-estrutura de Chaves Pblicas etc. para citar apenas alguns.

Da mesma forma, o modelo de funcionamento do Ajax, atravs de chamadas assncronas por javascript, no novo. O objeto XMLHttpRequest surgiu no final da dcada de 90, lanado primeiro pela Microsoft, junto com o navegador Internet Explorer 5, na forma de um ActiveX. Mais tarde surgiu em outros navegadores, na forma de um objeto Java. AJAX no ASP.NET 2.0 e Visual Studio 2005 Para o Visual Studio 2005, o Ajax Extensions traz um conjunto de controles simples, que permitem a execuo de chamadas assncronas atravs de controles visuais, ocultando a complexidade de se trabalhar diretamente com o objeto XMLHttpRequest. Alm disso, foi lanado tambm um conjunto de controles, o AJAX toolkit, com um conjunto de diversas funcionalidades j prontas. No Visual Studio 2005 e ASP.NET 2.0 o AJAX deve ser instalado a parte, atravs de um instalador fornecido pela Microsoft.

AJAX no ASP.NET 3.5 e Visual Studio 2008

172
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

O AJAX j parte integrante do .NET Framework 3.5 e do ASP.NET 3.5. Os controles AJAX Extensions, ao contrrio do que ocorre com o Visual Studio 2005, j vem integrados ao Visual Studio 2008 e no requerem instalao a parte. No Visual Studio 2005 era necessrio criar uma aplicao a partir de um Templates para podermos utilizar AJAX em uma aplicao, ou alguma informaes deveriam ser inseridas manualmente no arquivo Web.Config.

No Visual Studio 2008 qualquer aplicao ASP.NET j esta pronta para o AJAX, no preciso cri-la a partir de um Templates, tampouco necessrio intervenes no Web.Config.

AJAX Extensions O poder do AJAX esta disponvel em conjunto de controles na barra de ferramentas do Visual Studio:

Antes de entrarmos na parte prtica, vamos qual a funo de cada controle:

ScriptManager: O controle mais importante, ele que habilita as funcionalidades do AJAX na pgina. Deve existir apenas um em cada web form; ScriptManagerProxy: Utilizado com a funo do ScriptManager em uma pgina de contedo. No capitulo sobre Master Pages, vimos que cada pgina que utiliza uma pgina Master, denominada pgina de contedo. Deve funcionar em conjunto com o controle ScriptManager da pgina Master; Timer: Este controle deve ser utilizado para executar eventos em determinados intervalos. Veremos seu uso na prtica; UpdatePanel: Talvez o controle mais importante, permite que partes de uma pagina sejam atualizados de forma assncrona; 173
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

UpdateProgress: Se a requisio assncrona for demorada, podemos utilizar este controle para dar feedback ao usurio enquanto ele aguarda, seja exibindo uma mensagem ou mesmo uma imagem animada; Exemplo prtico com Update Panel Neste primeiro exemplo veremos como simples e rpido criar uma aplicao simples j capaz de fazer chamadas assncronas atravs do ASP.NET Ajax.

Primeiramente crie uma nova aplicao ASP.NET:

Na web form criado pelo Visual Studio, adicione um controle ScriptManager. Este controle deve ser o primeiro da pgina.

Em seguida adicione um controle UpdatePanel. Este controle um container, ou seja, dentro dele podemos colocar outros controles. o que vamos fazer agora, adicione dentro do UpdatePanel um controle Button e um controle Label.

Seu cdigo dever conter os seguintes elementos:


<div>

174
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

<asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <br /> </div> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <asp:Button ID="Button1" runat="server" Text="Button" /> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> </ContentTemplate> </asp:UpdatePanel>

Hora de escrever algum cdigo de servidor. A idia atualizar a hora no label. Como estaremos rodando a aplicao local e o processamento ser mnimo, no teremos nenhum efeito visual das funcionalidades do AJAX, por isso, alem de atualizar o horrio, vamos causar um delay no servidor.

De um duplo clique sobre o Button e escreva o seguinte cdigo:

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click System.Threading.Thread.Sleep(1000) Label1.Text = DateTime.Now.ToString() End Sub

protected void Button1_Click(object sender, EventArgs e) { System.Threading.Thread.Sleep(1000); Label1.Text = DateTime.Now.ToString(); }

Agora coloque outro Button e outro label abaixo do UpdatePanel (do lado de fora deste). De um duplo clique sobre o novo boto e escreva o mesmo cdigo, porm escrevendo a data no label2:

Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click System.Threading.Thread.Sleep(1000) Label2.Text = DateTime.Now.ToString() End Sub

protected void Button2_Click(object sender, EventArgs e)

175
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

{ System.Threading.Thread.Sleep(1000); Label2.Text = DateTime.Now.ToString(); }

Visualmente seu web form dever estar semelhante a imagem abaixo:

O que teremos ao rodar a aplicao? O primeiro boto ir fazer uma requisio assncrona, enviando uma informao mnima entre o postback. A segunda requisio far um postback de toda a pgina. Rode a aplicao, clique nos dois botes e observe os resultados.Se voc acha que no pode observar nada diferente, preste mais ateno: Observe que quando voc clicar no boto o navegador estar carregando a pagina (Se voc usa o Internet Explorer 7, observe o cone de carregar, que substitui o logo do IE na guia da pgina), aguardando o final do processamento.

176
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Adicionando um UpdateProgress Muitas vezes um postback pode ter uma grande carga de processamento e demorar mais do que gostaramos. Em casos extremos o usurio pode ficar impaciente, ou at achar que ocorreu algum problema. O Controle UpdateProgress forma de dar um feedback ao usurio enquanto ele aguarda o processamento. O Controle tambm do tipo container, voc decide o que vai colocar l dentro: uma mensagem, um gif, uma animao etc. O nico requisito para seu funcionamento coloc-lo na pgina j preparada para o AJAX e conect-lo a um UpdataPanel.

Vamos ver o funcionamento na prtica. Crie uma nova aplicao ASP.NET, coloque um controle ScriptManager e um controle UpdatePanel. Dentro do UpdatePanel coloque um controle label e um controle Button. De um duplo clique sobre o Button e digite o seguinte cdigo:

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click System.Threading.Thread.Sleep(1000) Label1.Text = DateTime.Now.ToString() End Sub

177
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

protected void Button1_Click(object sender, EventArgs e) { System.Threading.Thread.Sleep(1000); Label1.Text = DateTime.Now.ToString(); }

Note que voltamos a colocar um cdigo para causar um atraso na aplicao, a fim de podermos ter uma visualizao do efeito. Agora coloque um controle UpdateProgress, defina a propriedade AssociatedUpdatePanelID como UpdatePanel1, dentro do container do controle escreva uma mensagem como Aguarde...processando! :

Rode a aplicao, clique sobre o boto e observe o resultado:

178
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Triggers No exemplo anterior colocamos o boto que dispara o evento, e o label que mostra a data, dentro de um elemento ContentTemplate. Isto significa que a requisio assncrona envio informaes de ambos os controles no postback. Atravs de um elemento trigger podemos separar o contedo que ser atualizado do contedo que dispara o evento, otimizando o postback.

Vamos ver o funcionamento na prtica. Crie uma nova aplicao ASP.NET, coloque um controle ScriptManager e um controle UpdatePanel. Dentro do UpdatePanel coloque um controle label, abaixo e fora do container do UpdatePanel um controle Button. De um duplo clique sobre o Button e digite o seguinte cdigo:

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Label1.Text = DateTime.Now.ToString() End Sub

protected void Button1_Click(object sender, EventArgs e) { Label1.Text = DateTime.Now.ToString(); }

179
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Agora devemos informar o controle que vai disparar o evento. Selecione o UpdatePanel, na janela de propriedades clique em Triggers. Esta uma coleo de eventos que podem disparar a atualizao do contedo do UpdatePanel. Clique em Add. Informe em ControlID Button1, em EventName Clik, conforme imagem abaixo:

Observe agora o cdigo gerado pelo VS, compare com os exemplos anteriores:
<asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> </ContentTemplate> <Triggers> <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" /> </Triggers> </asp:UpdatePanel>

Observe que foi criado um elemento Triggers, que aponta para o controle e o evento que dispara o postback Assncrono. Roda a aplicao e teste o resultado.

180
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Usando um Timer Nos exemplos anteriores utilizamos o clique de um boto para disparar a chamada assncrona ao servidor. O controle Timer permite que chamadas sejam realizadas automaticamente, sem a necessidade da disparada de um evento pelo usurio.

Para tal, basta colocarmos um controle Timer dentro de um UpdatePanel, e em seu evento Tick escrever o cdigo a ser executado no servidor. Atravs da propriedade Interval definimos o intervalo de disparo destes eventos.

Para testarmos sua funcionalidade, crie uma nova aplicao ASP.NET 3.5, adicione ao web form criado um ScriptManager e logo abaixo um UpdatePanel. Dentro do UpdatePanel coloque um controle Label e um controle Timer. Defina a propriedade Interval do Timer em 1000 milesecundos, o que equivale a 1 segundo. De um duplo clique sobre o controle Timer e no manipulador de evento criado escreva o seguinte cdigo:

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Label1.Text = DateTime.Now.ToString() End Sub

protected void Timer1_Tick(object sender, EventArgs e) { Label1.Text = DateTime.Now.ToString(); }

Rode a aplicao e observe a atualizao da data a cada segundo:

181
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

182
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

14. Criando e Consumindo WebServices


Ao menos que voc tenha estado em uma caverna nos ltimos anos, com certeza j ouviu falar em XML e Web Service.

XML um padro de troca de informaes, no formato texto. um padro aberto e legvel at para humanos, por isso tem se tornado um padro na indstria. No vou ficar aqui explicando o que o XML ou no , pois existem toneladas de material na WEB sobre o mesmo, estou apenas o introduzindo j que ele importantssimo na funcionalidade dos Web Services.

Um Web Service uma aplicao web que disponibiliza um servio qualquer. Quem usa o servio o consumidor. As informaes trafegam sobre http, atravs de um protocolo conhecido com SOAP. O formato em que estar informaes trafega nada mais do que em XML.

Vrios outros acrnimos se aplicao a um Web Service. WSDL, ou Web Service Description Languagem um arquivo disponibilizado pelo servio com informaes a quem estiver interessado em consumi-lo. Disco um protocolo de busca de Web Services.

Com o advento do .NET, criar e consumir Web Services se tornou muito fcil. Quase tudo feito por trs das cmeras e voc precisa se preocupar unicamente com seu produto. Nesta seo vamos criar e consumir um Web Service. Criando um Web Service Para criar um Web Service, v em New Web Site, e selecione ASP.NET Web Service.

183
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Por padro criado um arquivo asmx, que equivalente a uma pgina aspx, porm sua funo prover servios e no contedo. Cada arquivo asmx tem um arquivo .vb ou .cs equivalente, onde so criados os mtodos a serem publicados. Um mtodo deve conter um atributo webmetodo, caso contrrio ele estar disponvel dentro da aplicao mas no externamente a esta. Se voc examinar o arquivo .cs ou .vb criado, notar que j existe um mtodo de demonstrao criado automaticamente:

<WebMethod()> _ Public Function HelloWorld() As String Return "Hello World" End Function

[WebMethod] public string HelloWorld() { return "Hello World"; }

Vamos criar um mtodo para realizar uma consulta em um banco de dados, em seguida vamos fazer uma aplicao para consumir este mtodo. Nosso mtodo simplesmente vai receber uma consulta como parmetro, executa-la usando classes do ADO.NET e retornar o resultado. Todo o restante problema do 184
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

FrameWork, ns no precisamos nos preocupar em gerar arquivos WSDL, gerar XML, inclu-lo na mensagem SOAP etc., tudo feito de forma transparente. Abaixo segue todo o arquivo service.vb / .cs

Imports Imports Imports Imports Imports

System.Web System.Web.Services System.Web.Services.Protocols System.Data System.Data.SqlClient

<WebService(Namespace:="http://tempuri.org/")> _ <WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _ <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ Public Class Service Inherits System.Web.Services.WebService <WebMethod()> _ Public Function Consulta(ByVal SQL As String) As DataSet Dim Adapter As New SqlDataAdapter(SQL, "Data Source=SERVIDOR;Initial Catalog=AdventureWorks;User ID=sa;Password=123456") Dim Data As New DataSet Adapter.Fill(Data) Return Data End Function End Class

using using using using using using

System; System.Web; System.Web.Services; System.Web.Services.Protocols; System.Data; System.Data.SqlClient;

[WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class Service : System.Web.Services.WebService { public Service () { //Uncomment the following line if using designed components //InitializeComponent(); } [WebMethod] public DataSet Consulta(string SQL) { SqlDataAdapter Adapter = new SqlDataAdapter(SQL, "Data Source=SERVIDOR;Initial Catalog=AdventureWorks;User ID=sa;Password=123456"); DataSet Data = new DataSet(); Adapter.Fill(Data);

185
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

return Data; } }

Note que a nica parte adicionada foi o mtodo Consulta.

Rode a aplicao, exibida uma pgina com informaes do Web Service:

Clique em Service Description, exibido o arquivo WSDL gerado pelo ASP.NET, este arquivo contm informaes sobre o servio e um meio de consulta para um aplicao que deseja consumi-la:

186
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Voc ainda pode testar o Web Service, para isso volte a pgina inicial, e clique sobre o nome do mtodo Consulta. A pgina exibe um campo onde voc deve entrar o valor do parmetro, nesta casa SQL. Preencha com um comando SQL:

187
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Clique em Invoke. O Resultado exibido em uma nova janela:

Consumindo o Servio Para consumir o servio crie adicione uma nova aplicao ASP.NET a soluo. Clique em propriedades, em seguida clique em Add Web Reference, exibida a caixa de dialogo abaixo:

188
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Clique em Web Service in this Solution. Na janela seguinte em Service, que o nome do servio que criamos no nosso Web Service:

189
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Em Web reference name mantenha o nome sugerido e clique em Add Rererence:

Agora v a nossa pgina Default.aspx, adicione um GridView, e no evento OnLoad da pgina adicione o seguinte cdigo:

Imports System.Data.SqlClient Imports System.Data Imports localhost.Service Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim Con As New localhost.Service Dim Ds As DataSet = Con.Consulta("SELECT * FROM Person.Address" GridView1.DataSource = Ds GridView1.DataBind() End Sub

using using using using using using using using using

System; System.Data; System.Configuration; System.Web; System.Web.Security; System.Web.UI; System.Web.UI.WebControls; System.Web.UI.WebControls.WebParts; System.Web.UI.HtmlControls;

190
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

using localhost; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Service Con = new Service(); DataSet Ds = Con.Consulta("SELECT * FROM Person.Address"); GridView1.DataSource = Ds; GridView1.DataBind(); } }

Rode a aplicao e observe o GridView ser preenchido. Abstraia o fato de voc estar rodando o servio e o consumindo em uma mesma maquina, com um Web Service possvel trocar e fornecer informaes de qualquer lugar, atravs de ambientes heterogneos ou mesmo incomunicveis de uma outra forma, utilizando um protocolo aberto e trocando informaes atravs de um padro reconhecido por toda a industria (XML).

191
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

15. Criando uma pgina de erros personalizada


Erros acontecem e sempre vo acontecer mesmo nas mais grandiosas aplicaes. Se no podemos nos livrar totalmente deles, pelo menos temos que tentar encarar uma situao desagradvel com esta com a maior classe possvel. O ASP.NET nos prove alguns recursos para tratamento de erro, no sentido de exibirmos mensagens padronizadas e mais amigveis para o usurio. Para exemplificar, primeiramente crie uma aplicao ASP.NET, e na pgina default digite o seguinte cdigo:

Dim con As New SqlConnection con.Open()

SQLConnection con = New SQLConnection; con.Open;

Como no informamos os parmetros necessrios para a abertura da conexo, obviamente que nos ser exibido um erro:

192
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Alm da mensagem no estar nada amigvel, importante ressaltar que determinadas mensagem, se exibidas para o usurio final, pode expor aspectos delicados de nossa aplicao, podendo inclusive coloca-la em risco. Para criar uma pgina de erro personalizada, primeiramente devemos criar uma pgina com este fim especifico. No exemplo, eu crie uma pgina chamada Erro.aspx e coloquei uma mensagem para o usurio:

Em seguida, adicionamos um n no web.config, como no exemplo abaixo:


<customErrors defaultRedirect="Erro.aspx" mode="RemoteOnly"> <error statusCode="500" redirect="Erro.aspx"/> </customErrors>

Vamos entender o que cada elemento significa. Primeiramente o atributo defaulredirect indica qual a pgina padro ser utilizada caso o cdigo do erro no seja especificado. Note que mais abaixo um n erro nos diz que para o cdigo 500, utilizamos a mesma pgina, mas podemos personalizar o redirecionamento para uma pgina especifica, conforme o tipo de erro.

193
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

O atributo mode importantssimo. Ele pode ter trs valores: RemoteOnly, que o valor padro, indica que a pgina de erro personalizada s ser exibida para usurios remotos. Isto permite que voc, que esta depurando a aplicao localmente, continue vendo as mensagens de erros detalhas. On significa que todos, remotamente ou localmente vero a pgina de erro personalizada, e Off, significa que ningum vai ver a pgina personalizada, ou seja, ser exibido o erro detalhado para todo mundo. Para ver a pgina de erro funcionando em sua mquina, altere o atributo mode para On, e rode a aplicao:

194
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

16. Eventos da aplicao


Diversos eventos disparados por uma aplicao web podem ser capturados e tratados pelo seu sistema. Os manipuladores para este eventos podem ser encontrados no arquivo global.aspx Para criar um arquivo global.aspx, v em Add new Item e selecione Global Application Class.

Os eventos disponveis so: Application_Start: Ocorre quando a aplicao iniciada, ou seja, quando o primeiro usurio acessa o site Application_End: Ocorre quando a aplicao termina. Application_Error: Disparado quando h um erro na aplicao. Session_Start: Ocorre quando a sesso inicia. Session_End: Ocorre quando a sesso finaliza. No exemplo abaixo, cada vez que uma sesso inicia, uma varivel de aplicao incrementada e decrementada quando a sesso termina:

Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs) Application("conta") += 1 End Sub Sub Session_End(ByVal sender As Object, ByVal e As EventArgs) Application("conta") -= 1 End Sub

void Session_Start(object sender, EventArgs e) { int i = Convert.ToInt32(Application["conta"]); i += 1; Application["conta"] = i; } void Session_End(object sender, EventArgs e) { int i = Convert.ToInt32(Application["conta"]); i -= 1; Application["conta"] = i;

195
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Para exibirmos o nmero de usurios em nosso site, basta exibir o valor da varivel em, por exemplo, um label:

Label1.Text = Application("conta")

Label1.Text = Convert.ToString(Application["conta"]);

196
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

17. Distribuindo sua Aplicao


Normalmente todo o software, depois de finalizado, deve ser distribudo. Aplicaes convencionais na sua maioria so distribudas atravs de instaladores especficos, o que permite que qualquer usurio possa instalar a aplicao em seu computador de maneira fcil, simplesmente seguindo alguns passos bsicos.

Aplicaes Web na sua maioria so instaladas em um nico ou em alguns poucos servidores. Voc pode simplesmente copia-la para o destino ou at mesmo gerar um instalador, como numa aplicao convencional.

Mas alm de distribuir sua aplicao existem outros cuidados que voc deve ter antes de colocar sua aplicao em produo.

Primeiramente quando voc cria sua aplicao, por padro ele vai estar com a depurao habilitada. A depurao habilitada no arquivo web.config:
<compilation debug="false" strict="false" explicit="true" />

A depurao, como voc deve imaginar, permite que voc depure seu aplicativo. Isto tem um custo: Alguns arquivos temporrios tm que ser mantidos e o desempenho da aplicao afetado. Quando voc roda seu aplicativo pela primeira vez, dentro da IDE do VS, uma caixa de dialogo informa que a depurao esta desabilitada. Voc pode habilit-la ou rodar a aplicao sem depurao, que seria o equivalente a execut-la fora da ambiente do VS:

197
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Ao autorizar a habilitao de depurao, seu web.config alterado:


<compilation debug="true" strict="false" explicit="true"/>

O que isto tem a ver com distribuio de aplicao? importante lembrar de desabilitar a depurao quando compilar sua aplicao para distribuio, pois ser gerado um cdigo otimizado e mais compacto. Outra dica importante colocar a aplicao em modo de Realise, no prprio VS, como na imagem abaixo:

Utilizando Copy Web Site A ferramenta Copy Web Site permite fazer uma copia de sua aplicao, seja para pasta em um sistema de arquivo, um servidor FTP ou at mesmo um diretrio sobre o IIS.

Para utilzir a ferramenta clique no cone

no solution Explorer.

A ferramenta possui uma interface simples, mostrando a esquerda os arquivos da sua apalicao e a direita os arquivos no destino:

198
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

O primeiro passo apontar o destino, para isso clique em Connect. Neste exemplo escolhi uma pasta local em meu comutador:

199
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Voc pode agora tranferir normalmente um arquivo de um lado para o outro. Note que arquivos alterados e no atualizados sem marcados com uma seta Azul, arquivos escluidos com um icone vermelho:

O processo de copia porem simplismente copia a aplicao da forma em que ela se encontra. Para que possamos fazer uma copia para publicao, vamos utilizar o recurso especifico com este fim. Publicao A ferramanta de publicao cria uma cpia pr-compilada de seu site. Para aciona-la, basta clicar com o boto direito sobre o nome da aplicao no Solution Explorer e escolher Publish. A caixa de dialo de publicao exibida:

200
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

A escolha do local feita da mesma forma que a ferramenta de copia: pode ser uma pasta, um FTP ou mesmo um diretorio virtual do IIS. Aps escolhido o local, basta clicar em Publish. Observe no diretrio de destinho que gerado uma pasta de nome bin, com um assembly em seu interior. Note tambm que arquivos .vb ou .cs no so incluidos na publicao:

Criando um instaldor
Outra forma criar um instaldor. O Visual Studio 2005 permite criar projetos de instao para praticamente qualquer tipo de aplicao. Para criar uma instalador para um web site, clique com o boto direito sobre a soluo, selecione Add New Project. Em Other Project Type selecione Setup and Deployment a esquerda, e em templates selecione Web Setup Project:

201
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

No projeto criado, a pasta WebApplicationFolder representa a aplicao a ser instalada. Para adicionar sua apliao ao instalador clique com o boto direito sobre esta pasta, selecione Project Output Na caixa de dialogo Add Projectt Output Grop so exibidos os projetos da soluo, se existir apenas um como no exemplo abaixo, simplismente clique em OK.

202
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Bom, neste ponto voc j tem o instalador Pronto! Para testa-lo basta clicar com o boto direito sobre o projeto do instaldor e selecionar Install. O instalador do projeto executado:

203
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Durante a instalao voc deve informar o nome do Site e do diretrio virtual. Aps a instalao voc pode desintala-la, para isso clique com o boto direito sobre o projeto do instalador e selecione Unistall. Mais recursos de instalao O que voc fez foi criar um instalador sem praticamente qualquer configurao, mas as opes que voc tem so enormes. Primeiramente, ao clicar no projeto do instalador, veja que voc pode personalizar diversas atributos do instalador, como autor, descrio, nome do produto etc.

204
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Existem ainda diversos editores que podem ser acessados atravs do solution explorer, so eles:

Properties: Permite configurar algumas caracteristicas do instalador. File System Editor: Permite adicionar ou remover arquivos ao instaldor, bem como atalhos para a aplicao na maquina de destino. Registry Editor: Permite manipular o registro do Windows durante a instalao. File Type Editor: Permite associar extenses de arquivo com a programa instalado. User Interface Editor: Talvez o mais interessante e trabalhosos, permite criar, remover e personalizar as janelas que sero exibidas durante o processo de instalao. Custom Action Editor: Permite executar aes personalizadas durante a instalao. A ao deve ser associada a uma fase, como Install, Commit, RollBack, Unistall Lauch condition Editor: Permite avaliar condies para a instalao.

205
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

18. Relatrios com Crystal Report


Nesta sesso vamos aprender a criar alguns relatrios bsicos com Crystal Report Crie uma nova aplicao Web. Clique com o boto direito sobre a aplicao, selecione Add New Item. Na caixa de dialogo selecione Crystal Report:

Ser exibido um assitente para configurar o relatrio, selecione As a Blank Report e clique em OK:

206
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

No Fields Explorer, clique em Database Fields com boto direito e selecione Database Expert.

207
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Expanda Create New Connection e selecione OLE DB(ADO):

Selecione Microsoft Ole DB Provider for SQL Server e clique em avanar: 208
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Preencha as informaes de servidor, usurio, senha e banco de dados, clique em avanar:

209
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Algumas informaes so exibidas, clique em concluir. De volta ao DataBase expert, selecione a tabela da qual ser gerado o relatrio:

210
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

De volta ao DataBase Fiedls, expanda o n da tabela, arraste os campos para a sesso detais de seu relatrio:

211
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Agora abra a sua pgina Default.aspx, adicione um controle CrystalReportViewer, que pode ser encontrado na Guia Crystal Reports. Na Smart Tag do controle, em Chose Report Souce, selecione New Report Souce:

Mantenha o nome padro e selecione o relatrio criado em Specify a Crystal...

Rode a aplicao.

212
ASP.NET 3.5 em VB.NET e C# Copyright2008, Fernando Amaral. Todos os direitos reservados. Este documento protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br

Potrebbero piacerti anche