• Nenhum resultado encontrado

Curso Básico ASP.NET 3.5 (C)

N/A
N/A
Protected

Academic year: 2019

Share "Curso Básico ASP.NET 3.5 (C)"

Copied!
77
0
0

Texto

(1)
(2)

!

" #$

" %

(3)

A Plataforma Microsoft.NET oferece uma alternativa de ambiente para produzir e executar aplicações web, rodando#as em PCs, micros de mão e outros dispositivos, como telefones celulares. O plano da Microsoft é tornar a infra#estrutura dessa plataforma amplamente disponível. Tanto que ela já pode ser baixada em seu site e deverá fazer parte das próximas versões do Windows.

A Plataforma .NET é também a principal arma com a qual a Microsoft tenta marcar posição no concorridíssimo mercado dos Serviços Web (Web Services) # nome dado a programas ou componentes que devem ser utilizados na Internet.

Estes serviços on#line são a pedra de toque da Internet, tal como os estrategistas das grandes empresas a imaginam num futuro próximo.

Por meio de serviços web, empresas trocarão informações e farão negócios. Aplicações que rodam num local poderão usar módulos localizados num servidor remoto, consolidando um modelo de computação distribuída. Residentes em servidores web, esses serviços podem fornecer produtos finais # por exemplo, documentos e informações # ou desempenhar tarefas específicas, como realizar cálculos e autenticar transações. Espera#se, assim, que os sites operem de forma integrada, gerando benefícios para empresas e indivíduos. Na essência, essa visão dos serviços web é hoje compartilhada por grandes nomes como IBM, Sun e Oracle, e todos têm iniciativas nessa área.

Uma característica central da Plataforma .NET é aderir aos padrões da Internet sem abrir mão de procedimentos já consagrados no Windows. Para isso conta com o Visual Studio.NET, suíte de programação definida pela Microsoft como "especialmente voltada para a rápida construção e integração de Web Services".

O produto incorpora as linguagens Visual Basic, Visual C++ e Visual C# ("CSharp), todas com sobrenome .NET.

NOTA:

(4)

TERMOS DA PLATAFORMA

CLR Sigla de Common Language Runtime. Base comum a todas as linguagens .NET, o CLR é o ambiente que gerencia a execução de código escrito em qualquer linguagem. Faz parte do Framework.

FRAMEWORK É o modelo da plataforma .NET para construir, instalar e rodar qualquer aplicação, no

desktop ou na Internet. Para executar um programa .NET, é preciso ter o Framework instalado.

IDE COMPARTILHADO Ambiente integrado de programação (Integrated Development Environment) do

Visual Studio.NET. Diferentes linguagens usam o mesmo editor de código e depurador e compilam executáveis na linguagem MSIL. Além das linguagens da Microsoft, já há mais de 20 outras (Perl, Cobol, Pascal, etc) que podem usar esse ambiente.

MSIL Microsoft Intermediate Language. Quando se compila uma aplicação .NET, ela é convertida para uma linguagem intermediária, a MSIL, um conjunto de instruções independentes de CPU. Na hora de executar o programa, um novo compilador, chamado Just#in#time (JIT) Compiler, o converte para o código nativo, ou seja, específico para o processador da máquina.

MANAGED CODE Código administrado, ou seja, código escrito para rodar com o runtime do VS.NET. No VS.NET, somente o C++ produz programas que não dependem do runtime, o chamado Unmanaged code.

SOAP Sigla de Simple Objetc Access Protocol, ou protocolo simples de acesso a objetos. O SOAP é um padrão aberto, baseado em XML, criado pela Microsoft, Ariba e IBM para padronizar a transferência de dados entre aplicações. Pode ser usado em combinação com vários outros protocolos comuns da Internet, como HTTP e SMTP.

(5)

XSD Sigla de XML Schema Definition. Arquivo associado a um documento XML que descreve e valida aos dados no documento. Assim como as linguagens de programação, os XSDs aceitam dados de diferentes tipos, como números, data e moeda.

XML WEB SERVICES Blocos fundamentais para a criação de sistemas de computação distribuída na

Internet. Um serviço web é uma porção de código localizada num servidor web e que pode ser utilizada por uma aplicação qualquer. O web service pode produzir documentos ou procedimentos. Uma das características centrais dos web services é serem baseados em padrões abertos.

WSDL Web Service Description Language. Submetida à W3C # o órgão padronizador da Internet # . A linguagem WSDL define regras baseadas em XML para descrever serviços web.

(6)

Variáveis na linguagem C#

Na linguagem C# as variáveis estão agrupadas em algumas categorias como:

→ Static:Existe apenas uma única cópia desta variável para todas as instancias de uma classe. Uma variável static começa a existir quando um programa começa a executar, e deixa de existir quando o programa

terminar.

→ Instance: existe uma cópia para cada instancia de uma classe. Uma variável Instance começa a existir quando uma instancia daquele tipo é criado, e deixa de existir quando não houver nenhuma referência àquela instancia ou quando e método Finalize é executado.

→ Array:é uma matriz que é criada em tempo de execução. Tipos

Podemos armazenar muitos tipos de informações diferentes dentro de uma variável, como números, datas, e strings. Nesta linguagem, seus tipos podem ter dois tipos:

→ Por Valor:os valores são gerenciados diretamente na memória. → Por Referencia:os valores são passados por meio de um ponteiro. Inteiros (por valor)

Este tipo é um numero inteiro sem fração ou parte decimal. Por exemplo, o número 1058 é um numero inteiro. O tipo inteiro é subdividido em alguns subtipos. Veja a tabela que mostra estes tipos de inteiro.

Tamanho Descrição

byte !"#$ %! &" '!( '" )* +, ) - . Sbyte Inteiro com sinal de 8 bits (#127 a 128)

int Inteiro de 32 bits com sinal (#2.147.483.648 a 2.147.483.147) uint Inteiro de 32 bits sem sinal (0 a 4.294.967.295)

(7)

Exemplos:

byte VarIdade = 25; int VarValor = 1.542;

long VarValor = 5.684.548.520; short VarInd = 25.620;

Lógicos (por valor)

Esses tipos são usados para comparação. Portanto esses tipos só podem assumir os valores verdadeiro ou falso.

Tipo Descrição

bool #/! $/ 0)*'!

Exemplos:

bool VarDesativado = false; bool VarCondicao = true; Caracteres (por valor)

Este tipo é armazenado em 16 bits, representa um caractere de uma string. Essas variáveis são armazenadas no padrão Unicode.

Tipo Descrição

char ( 1 "2$ 2)#)2 !#! "2$%! %! &" '

Exemplos de forma de representação:

char VarChar = ‘a’;

Representa um caractere literal.

char VarChar = ‘\x0025’;

Representa um caractere hexadecimal.

char VarChar = ‘\u0025’;

Representa um caractere Unicode.

char VarChar = (char)25;

(8)

Ponto Flutuante (por valor)

As variáveis com este tipo possuem números com ponto flutuante utilizando o padrão IEEE de 4 a 8 bytes.

Tipo Descrição

double $ $ 0*/ /) ! &" 3#"$ %! 4 &5 !'

' ! "6$ !( /() 6#!2"'7$ %! 2)')' %!2"()"'

float $ $ 0*/ /) ! &" 3#"$ %! 8 &5 !'

Este tipo tem uma precisão de 7 casas decimais.

As operações com este tipo não geram erros, mas há alguns ressaltos que devemos saber:

→ Se o valor retornado para a variável conter um número muito pequeno, este valor torna#se zero. → Uma divisão por zero não causa um erro, mas é produzido um valor infinito.

→ Operações de ponto flutuante devolvem NaN (Not a Number) para sinalizar que aquele resultado da operação é indefinido. Portanto se um dos operadores for NaN o resultado retornado será NaN.

Exemplos:

float VarIndice = 3.1356F; double VarCorrecao = 5.12D; Decimal (por valor)

O tipo decimal representa com mais precisão números não inteiros e com um valor muito alto.

Tipo Descrição

decimal $ $ 0*/ /) ! %!2"()* %! -4 &5 !' Este tipo tem uma precisão de 28 casas decimais.

Exemplos:

(9)

String (por referência)

Este tipo pode conter até 1 gigabyte de caractere e é alocado dinamicamente, por isso dizemos que este tipo é por referência.

Tipo Descrição

string "2$%! 2$( ) 9 :":)&5 ! %! 2)#)2 !#!

Exemplos:

string VarNome = “Luiz Maia”;

string VarEmail = “luiz@cvsistemas.com.br”; string VarConcatenar = VarNome + VarEMail;

As strings são compostas por caracteres e podem conter literais caracteres. Veja a representação dos literais strings:

Tipo Descrição

\’ 6;' #$0$

\” '6)'

\\ )##) " <!# "%) \0 =!#$ &" 3#"$ $/ /*$

\a *!# )

\b ! #$2!''$

\f <) >$ %! 63:" ) \n )* $ %! *" ?)

\r ! $# $ %! 2)##$

\t )&/*)>7$ ?$#"@$ )* \v )&/*)>7$ <!# "2)*

(10)

Exemplos:

string VarLinha = “Pula Linha \n”;

string VarCaminho = @”c:\temp\oledb.txt”;

Neste caso com o uso da arroba ( @ ) a representação dos caracteres de barra invertida ( \ ) não é feita dentro da string.

Enum (por valor)

O tipoenum é usado para declarar uma enumeração, um tipo distinto que consiste em um jogo de constantes nomeadas chamadas a lista de enumerados.

Exemplos:

enum DiasDaSemana { Domingo = 1, Segunda = 2, Terca = 3, Quarta = 4, Quinta = 5, Sexta = 6 }

Arrays

Um tipo array é uma matriz de valores do mesmo tipo, que é criada em tempo de execução, podendo ser acessada por meio de um índice.

A declaração do array sempre faz o uso de um colchete( [ ] ) depois do tipo da variável. O uso da instrução new sempre deve ser utilizado, pois é obrigatório.

O tipo array pode ter diversas dimensões, o tamanho desta é definido pelo desenvolvedor, mas devemos saber que o primeiro índice é sempre zero.

No tipo array devemos sempre inicializar seus elementos, pois é obrigatório também. Veja abaixo a forma de sintaxe para a declaração de arrays:

TIPO[ ] nomeDoArray = new TIPO[ ]; Float[ ] nomeDoArray = new Float[ ];

(11)

Estruturas de decisão

As estruturas de decisão ou também chamada de lógica condicional, permite especificar qual código deve ser executado dependendo das condições satisfeitas. Este recurso torna#se necessário para qualquer lógica implementada.

Instrução if

É a forma mais simples de se aplicar à lógica condicional.A instrução if é simples. Se a condição for satisfeita então o código é executado. Vamos ver a forma de sintaxe para esta instrução (if).

If ( condição ) {

//Instruções;

}

A instruçãoelseé opcional e indica a instrução que o aplicativo deve executar se a condição imposta pelo if não for satisfatória.

Temos também a instruçãoelse ifque permite testar outras condições.

If ( condição ) {

//Instruções;

} else if ( condição ) {

//Instruções;

} else {

//Instruções;

}

Instrução switch

A instrução switché utilizada em situações em que houver a necessidade de diversos testes condicionais. São basicamente uma combinação de instruçãoifcom orações deelse if. Estas instruções examinam uma condição e especifica qual bloco de código deve ser executado. Vamos examinar a sintaxe da instrução switch.

switch ( condição ) {

case condição 1 : //Instruções; break;

case condição 2 : //Instruções; break;

case condição N : //Instruções; break;

(12)

Estruturas de Repetição

As estruturas de repetição são utilizadas em situações onde é preciso executar um conjunto de instruções determinadas vezes, até que a

condição imposta para o fim da repetição for satisfeita.

Instrução For

Esta estrutura de repetição é utilizada quando o desenvolvedor sabe quantas vezes o código deve ser executado. Por isso devemos definir as faixas inicial e final. Esse loop incrementa um contador para dizer quando encerrar a execução desta repetição. Vamos acompanhar abaixo a sintaxe desta instrução (for).

for ( variável; condição; incremento ) { Instruções;

}

Uma variação desta instrução é oforeach...in. A diferença desta instrução é que o desenvolvedor não precisa especificar as faixas inicial e final. É utilizado para percorrer uma coleção ou um array por exemplo. Vamos acompanhar a sintaxe da instrução.

foreach ( tipo variável in coleção/array ) {

//instruções;

}

Instrução While

Esta instrução executa um loop enquanto uma determinada condição de execução for satisfatória. While significa enquanto, portanto enquanto a condição for verdade serão executas as instruções. Acompanhe a sintaxe abaixo:

while ( condição ) {

(13)

Instrução Do While

O loop do while tem a mesma função da instrução While, a única diferença é que a condição é testada no final da instrução. Com isso podemos assegurar em alguns casos na linguagem C# que o loop seja realizado pelo menos uma única vez. Acompanhe a sintaxe abaixo:

do {

//Instrucoes;

} while ( condição );

Formatação

A formatação é muito utilizada pelos desenvolvedores em suas aplicações. Este processo busca uma forma de apresentação mais inteligível e funcional, em função das configurações de cada país, principalmente na formatação de valores monetários e datas. Para isso a plataforma .Net traz muitas funções para a linguagens C#.

Formatação de Números

É essencial a formatação de números nas aplicações desenvolvidas. A linguagem C# trabalha bem com estas formatações. Para isso destacaremos a função ToString:

ToString( ): retorna a formatação padrão dos tipos numéricos. Este método é disponível para os tipos numéricos. Aceita uma string de formatação para os tipos como – valores monetários, decimal, ponto fixo, dentre outros, e uma referência para uma cultura. Acompanhe abaixo a sintaxe do método:

VariavelNumerica.ToString(“StringFormatação”,ReferenciaCultural);

Exemplo:

VarValor.ToString(“c”, new CultureInfo(“pt BR”));

(14)

A tabela abaixo mostra#nos os caracteres de formatação que são utilizados na função ToString( ):

Caractere Descrição

C ou c !6#!'! )( <)*$#!' ($ ! 3#"$'

D ou d B$#() )>7$ !2"()* 6! )' 6)#) 1(!#$' !"#$' E ou e B$#() $ %! $ )>7$ "! "0"2)

F ou f !6#!'! )( $ 0$#() $ %! $ $ B"A$ G ou g B$#() $ C!#)* %$' 1(!#$'

N ou n !6#!'! )>7$ /(9#"2) P ou p B$#() $ %! 6$#2! ):!(

R ou r ''!:/#) D/! /( 1(!#$ 2$ <!# "%$ 6)#) ' #" :E !#3 $ (!'($ 0$#() $ '! 2$ <!# "%$ %! <$* ) 6)#) 1(!#$

X ou x B$#() )>7$ 6)#) !A)%!2"()*

Formatação de Datas e Horas

Para um aplicativo que é utilizado em vários paises, devemos ter o cuidado para o tratamento de datas e horas. É necessária a formatação para as aplicações que necessitam das informações de datas e horas para executar determinadas funções.

A linguagem C# sabendo da importância do tratamento de datas e horas, dispõe de duas classes para isso: DateTime e TimeSpan. Vejamos abaixo a sintaxe do método ToString( ) para a formatação de datas:

VariavelDateTime.ToString(“StringFormatação”,ReferenciaCultural);

Exemplo:

VariavelDateTime.ToString(“dd/MM/yyyy”);

(15)

Como visto acima, o método ToString( ) possui como parâmetros: uma string de formatação e uma expressão para a referencia Cultural. Acompanhe na tabela abaixo os caracteres de formatação correspondente para a manipulação de datas e horas.

Caractere Descrição Exemplo

d Exibe o dia do mês sem o zero

E -E E -E

dd Exibe o dia do mês com o zero

, E ,-E , E -E

ddd Exibe o nome abreviado do dia

!:E !#E F/)

dddd Exibe o nome completo do dia

!:/ %)G0!"#)

M Exibe o mês sem o zero

E E E

-MM Exibe o mês com o zero

, E ,E , E

-MMM Exibe o nome abreviado do mês

H) E )#E !@

MMMM Exibe o nome completo do mês

H) !"#$E !@!(&#$

y Exibe os dois últimos dígitos do ano sem o zero

E -E E

yy Exibe os dois últimos dígitos do ano com o zero

, E ,-E , E

yyyy Exibe os quatro dígitos do ano

-,,4E -,, E

?

Exibe as horas sem o zero para horas de 1 a 9.

Apresenta formato de 12 horas. E E E

-??

Exibe as horas com o zero para horas de 1 a 9.

Apresenta formato de 12 horas. , E ,E , E

-H Exibe as horas sem o zero para horas de 1 a 9.

Apresenta formato de 24 horas. E -E E E

HH Exibe as horas com o zero para horas de 1 a 9.

Apresenta formato de 24 horas. , E ,-E , E E

m Exibe os minutos sem o zero para minutos de 1 a 9.

E -E E -E 4

mm Exibe os minutos com o zero para minutos de 1 a 9.

, E ,-E , E -E 4

s Exibe os segundos sem o zero para seg. de 1 a 9.

E -E E E

ss Exibe os segundos com o zero para seg. de 1 a 9.

, E ,-E , E E

: Separador de tempo

I 8 I

-/ Separador de data

(16)

-,,-Conversão de Valores

Converter um tipo de dado em número ou em literal é comum em situações de programação. Quando esta aplicação for destinada a Web com intervenções de internautas, esse recurso é utilizado com mais freqüência ainda. É comum o internauta testar a aplicação para ter certeza que o desenvolvedor se preocupou com as devidas conversões de valores.

Devemos considerar alguns aspectos para a conversão de números:

Como existem diversos tipos de números, inteiros, ponto flutuante ou decimal, os valores são convertidos sempre para o tipo de maior faixa de valores. Por exemplo, o tipo long é convertido para o ponto flutuante, mais é importante ressaltar que o contrario causa um erro.

Os tipos de menor faixa são convertidos para os de maior faixa. Por exemplo, o tipo int pode ser convertido para: long, float, double ou decimal.

A conversão dos tipos de ponto flutuante(float, double) para decimal causa erro.

A conversão entre os tipos com sinal e sem sinal de valores inteiros com o mesmo tamanho causa erro. Por exemplo, entre o tipo int e unit.

Caso precise forçar uma conversão mesmo que haja perda de informações, a linguagem disponibiliza um operador com este recurso.

Exemplos:

int VarValor = (int)8544555L;

Neste caso a variável inteira vai receber o quanto poder suportar do tipo long.

long VarValor = (long)29.145;

Neste caso a variável inteira do tipo long suportará o quanto for possível do número não inteiro.

Em alguns casos os tipos de conversão não precisam ser especificados pelo desenvolvedor, essa conversão é feita automaticamente.

(17)

Operadores

Operadores são símbolos utilizados para efetuar alguma ação. Veja a tabela de operadores que o C# suporta.

Tipo Operador

aritméticos K G L J

lógicos M NN OO

concatenação K

Incremento e decremento KK

relacional P Q PR QR

Igualdade RR MR

atribuição R LR JR KR

condicional S I T"0 " *" ! $/ !# 3#"$U

Métodos

Métodos são implementados para executar alguma ação e podem ser declarados em um objeto ou classe. (Métodos Estáticos) são métodos que podem ser acessados através de suas classes e ou objetos sem a necessidade de instanciar os mesmos, já (Instância de métodos) somente podem ser acessados através da instância de sua classe e ou objeto.

Os métodos possuem uma lista de parâmetros (pode ou não conter parâmetros) que representam valores ou variáveis referenciadas, podendo também retornar algum tipo de dado.

A assinatura de um método deve ser única na classe em que foi declarada. A assinatura de um método consiste no nome do método, e sua lista de parâmetros, os tipos dos parâmetros informados, e tipo de dado caso a mesma retorne algum dado.

Value Parameter:É usado como parâmetro de entrada apenas (Input). A modificação do valor deste parâmetro dentro do método não é refletida fora do escopo do método.

(18)

Exemplo: (Static Method)

static void RegistrarAcesso(Int32 codigoPedido) {

// Código do método.

}

Exemplo: (Instance Method)

void RegistrarAcesso (Int32 codigoPedido) {

// Código do método.

}

Exemplo: (Reference Parameter)

void RegistrarAcesso (ref Int32 codigoPedido) {

// Código do método.

}

Exemplo: (Retornando valores)

decimal CalcularPedido(ref Int32 codigoPedido) {

// Código do método.

(19)
(20)

Criando Aplicação Web

Para criar sua primeira aplicação no Visual Studio, siga os seguintes passos:

1. Selecione File ► New ► Web Site do menu do Visual Studio. A caixa de diálogo será aberta, veja a imagem abaixo:

2. Escolha o tipo da aplicação. Selecione o template . Outros templates irão auxiliá#lo na criação de web sites mais específicos, adicionando arquivos adicionais ou configurações específicas. 3. Selecione a versão do .NET FRAMEWORK que você desejo utilizar. Normalmente você irá utilizar o

(21)

4. Escolha uma localização para o Website. A localização específica onde os arquivos do Webiste ficarão armazenados. Normalmente escolhemos e então usamos as pastas do computador local. Você poderá informar o diretório manualmente na caixa de texto da localização ou poderá clicar no botão onde a caixa de diálogo será exibida (veja imagem abaixo):

5. Clique no botão OK para criar o website. Neste ponto o Visual Studio irá criar o novo website com apenas três arquivos. Um arquivo chamado Default.aspx que é a página inicial do website, outro arquivo chamado Default.aspx.cs que é o código fonte da página. O terceiro arquivo é o arquivo de configuração do website chamado web.config (Iremos explorar este arquivo mais tarde).

(22)

Solution Explorer

A Solution Explorer reflete tudo que está no diretório da sua aplicação, nenhum arquivo ficará escondido, pois se você através do Windows Explorer adicionar arquivos HTML, imagens, e diretórios, e na próxima vez que você atualizar a Solution Explorer você verá os novos conteúdos adicionados.

Adicionando WebForms

(23)

Você poderá adicionar vários outros tipos de arquivos, como arquivos de configuração, Style Sheets, Imagens, Arquivos HTML, Arquivos de código e muito mais.

Para adicionar um web form, escolha Web Form na caixa de diálogo, você verá duas novas opções

! " , deixando esta opção desmarcada o visual studio irá criar apenas um arquivo, e você deverá colocar o código fonte da página na mesma página que você irá colocar o HTML da mesma, marcando tal opção um arquivo distinto será criado para conter o código fonte da página separando o código HTML do código fonte (recomendável). A outra opção é # onde você poderá criar sua página selecionando uma página padrão, iremos explorar esta opção mais tarde.

(24)

Tipos de Arquivos ASP.NET (ASP.NET Files Type)

As aplicações Asp.Net podem inlcuir vários tipos de arquivos. A tabela abaixo descreve os principais tipos de arquivos:

Nome do Arquivo Descrição

Final com .aspx

' !' )#D/"<$' '7$ )#D/"<$' %! 63:" )' E !' !' )#D/"<$' 2$ !( ) " !#0)2! %$ /'/3#"$ ! $62"$ )*(! ! $ 2;%":$ 0$ ! %) (!'()

Final com .ascx

' !' )#D/"<$' '7$ $' '!# 2$ #$*'E '7$ '"("*)#!' ) /() 63:" ) V!&E 6$#9( !*!' 7$ 6$%!( '!# )2!'')%$' %"#! )(! !E %!<!( !' )# %! #$ %! /() 63:" ) V!& + )'6A. '!# 2$ #$*' 6!#(" ! <$2W 2#")# 6!D/! )' 6!%)>$' " !#0)2!' " '!#"%$' !( %"<!#'$' V!& 0$#('

Web.config

' ! 9 /( )#D/"<$ &)'!)%$ !( X 2$( )' 2$ 0":/#)>Y!' %) '/) )6*"2)>7$ !' ! )#D/"<$ !' 7$ " 2*/'$' 2$ 0":/#)>Y!' %! '!:/#) >)E :!#! 2")(! ! %! !' )%$ +' ) ! () ):!(! . ! (/" $ ()"'

Global.asax

' ! 9 /( )#D/"<$ :*$&)* %) )6*"2)>7$ $2W 6$%! /')# !' ! )#D/"<$ 6)#) %!0" "# <)#"3<!"' :*$&)"' +<)#"3<!"' D/! 6$%!( '!# )2!'')%)' 6$# D/)*D/!# 63:" ) %) )6*"2)>7$. ! )(&9( /')# !<! $' 2$($ D/) %$ ) )6*"2)>7$ 9 " "2")*"@)%)

Final com .cs

(25)

ASP.NET Application Directories (Diretórios ASP.NET)

Toda aplicação web deveria ter uma estrutura de diretório bem planejada. Por exemplo, você provavelmente irá querer separar a pasta de armazenamento de imagens diferente de suas páginas web. Você poderá colocar suas páginas ASP.NET em um pasta pública e restringir o acesso a outras pastas. Além das pastas que você criou, o ASP.NET usa alguns subdiretórios especiais, algumas delas estão listadas abaixo:

Diretório Descrição

Bin

$ 9( $%$' $' 2$(6$ ! !' 2$(6"*)%$' + '. D/! $

!' ) / "*"@) %$ $# !A!(6*$E '! <$2W 2#")# /( 2$(6$ ! ! !'6!2[0"2$E <$2W %!<!#3 2$*$2)G*$ !' ) 6)' )

App_Code $ 9( )#D/"<$' %! 2;%":$ 0$ ! D/! '7$ %" )("2)(! ! 2$(6"*)%$' 6)#) '!#!( /')%$' 6!*) )6*"2)>7$

App_WebReferences #()@! ) )' #!0!#W 2")' )$' V!& '!#<"2!' / "*"@)%$' 6!*) )6*"2)>7$

App_Data

#()@! )(! $ %! %)%$'E " 2*/" %$ )#D/"<$' %! &) 2$ %! %)%$' 2$($ F !#<!# -,, A6#!'' %" "$ E )#D/"<$' X *)#$ D/! <$2W 6$%!#3 )#()@! )# )"' )#D/"<$' !( D/)*D/!# $/ #$ %"#! ;#"$

App_Themes #()@! ) $' !'D/!()' + ?!(!'. D/! '!#7$ / "*"@)%$' 6!*) '/) )6*"2)>7$ V!&

Introdução a Server Controls

O ASP.NET inova trazendo um novo modelo de criação de páginas web. O desenvolvimento de páginas web de antigamente, programadores tinha que saber o máximo de HTML antes da criação de suas páginas web dinâmicas. ASP.NET resolveu este problema com o modelo autonível de controles do lado servidor ( $

). Estes controles são criados e configurados como objetos. Eles rodam do lado servidor (web server) e seus HTML são automaticamente gerados.

Estes controles são baseados no servidor (server#based), porém são equivalente aos elementos HTML padrão.

(26)

HTML Server Controls

HTML server controls são objetos de interface para os elementos padrões do HTML. Eles possuem três características:

Você poderá setar as propriedades através do código e o HTML final será gerado automaticamente quando sua página for renderizada e enviada para o cliente.

Por causa da perda de estado na web, páginas web precisam fazer muito trabalho para manter o estado das informações entre uma requisição e outra. Os controles HTML Server Controls fazem esta tarefa automaticamente para você.

Por exemplo, botões executam um evento quando clicados, caixas de textos executam um evento quando seu conteúdo é modificado, entre outros. Seu código poderá responder a estes eventos.

Exercícios

1. Criar uma página web estática que faça a conversão de real para dólar americano, em seguida converte# lá para uma página ASP.NET, implementando a funcionalidade de conversão.

<html> <head>

<title>Conversor de Valores</title> </head>

<body>

<form method="post"> <div>

Converter:&nbsp; <input type="text" />

&nbsp;Reais para U.S. dollars. <br /><br />

<input type="submit" value="OK" /> </div>

(27)

Como novo web form aberto, exclua todo o conteúdo do arquivo !% exceto a diretiva da página (! # $ ). A diretiva das páginas ASP.NET trazem informações básicas sobre como o compilador irá compilar a página. Nesta diretiva você indicará qual linguagem de programação será usada. Se você estiver usando um arquivo diferente para armazenar o código fonte da página (Code#Behind), você deverá indicar o local de armazenamento do código de fonte e também o nome da classe da página (Page class name).

Finalmente, copie o conteúdo HTML da página estática e no web form abaixo da diretiva do arquivo. Segue abaixo versão nova do arquivo com a diretiva arquivo em negrito.

<%@ Page Language="C#" CodeFile="ConversorDeValores.aspx.cs" Inherits="ConversorDeValores" %>

<html> <head>

<title>Conversor de Valores</title> </head>

<body>

<form method="post"> <div>

Converter:&nbsp; <input type="text" />

&nbsp;Reais para U.S. dollars. <br /><br />

<input type="submit" value="Converter" /> </div>

</form> </body>

&' (

Agora iremos colocar o atributo runat=”server” em todas as tags que iremos transformar em um controle HTML Server Control, desta forma precisaremos informar também informar um ID único para os objetos que

desejarmos acessar através do código.

(28)

<%@ Page Language="C#" CodeFile="ConversorDeValores.aspx.cs" Inherits="ConversorDeValores" %>

<html> <head>

<title>Conversor de Valores</title> </head>

<body>

<form method="post"runat=”server”> <div>

Converter:&nbsp;

<input type="text"ID=”textBoxValor” runat=”server”/> &nbsp;Reais para U.S. dollars.

<br /><br />

<input type="submit" value="Converter"runat=”Server” ID=”buttonConverter”/> </div>

</form> </body>

&' (

(29)

Eventos

Quando o usuário clica no botão “Converter” e a página é enviada novamente para o servidor web, o ASP.NET precisa saber exatamente qual código você deseja executar. Para criar a relação entre eventos e métodos, você precisa adicionar um atributo na #do controle. Por exemplo, se você deseja executar algum código quando o usuário clicar no botão, você deve informar a propriedade OnServerClick com o nome do evento a ser executado:

<input type="submit" value="Converter" ID="buttonConverter"OnServerClick="Converter_ServerClick" runat="server">

O ASP.NET permite que você através do código fonte da página, associe eventos aos controles da mesma, veja o exemplo abaixo:

buttonConverter.ServerClick += new EventHandler(buttonConverter_ServerClick);

Os HTML server controls permite apenas dois tipos de eventos, ServerClick e ServerChange. Veja abaixo a sintaxe de um método associado a um evento:

protected void buttonConverter_ServerClick(Object sender, EventArgs e)

Onde o argumento (, - .é o objeto que gerou o evento e o argumento ( ) incluí informações adicionais sobre o evento.

ViewState

Após rodarmos uma aplicção ASP.NET, a primeira coisa que você irá identificar é que existem apenas pequenas alterações no HTML estático original.

A primeira diferença é a existência do atributo runat=”server”, a segunda diferença e muito importante, é que o ASP.NET gera automaticamente um objeto do tipo HiddenField. Segue abaixo código:

<%@ Page Language="C#" CodeFile="ConversorDeValores.aspx.cs" Inherits="ConversorDeValores" %>

<html> <head>

<title>Conversor de Valores</title> </head>

<body>

<form method="post"runat=”server”> <div>

<input type="hidden" ID="__VIEWSTATE" name="__VIEWSTATE" value="dDw3NDg2NTI5MDg7Oz4=" />

<div> <div>

Converter:&nbsp;

<input type="text"ID=”textBoxConverter” runat=”server”/> &nbsp;Reais para U.S. dollars.

<br /><br />

<input type="submit" value="OK"runat=”Server” ID=”buttonOk”/> </div>

(30)

O controle/ armazena todas informações dos controles contidos na página, estas informações estão armazenadas em um formato de compressão (compressed format). Desta forma você poderá manipular as propriedades dos controles no código fonte da página e persistir as informações entre vários posts em sua página.

Classe Page

Toda página web (web form) é uma pagina customizada que tem como base a classe 0 # . A herança desta página faz com que seu web form adquire inúmeras propriedades e métodos. Veja tabela abaixo as propriedades fundamentas de uma página.

Propriedade Descrição

IsPostBack #$6#"!%)%! + $$*!) . " %"2) "<) %! 2)##!:)(! $ " "2")* %) !*) $/ '! ) (!'() !' ) '! %$ ! <")%) $<)(! ! )$ '!#<"%$# +6$' .

EnableViewState %"2) '! $ 0$#(/*3#"$ "#3 () !# $/ 7$ )' " 0$#()>Y!' %$' 2$ #$*!' %) 63:" )E !' ) 6#$6#"!%)%! '$&#!'2#!<! )' 6#$6#"!%)%!' %$' 2$ #$*!'

Application $*!>7$ %! " 0$#()>Y!' 2$(6)# "*?)%)' ! #! $%$' $' /'/3#"$' %$ '" !

Session $*!>7$ %! " 0$#()>Y!' %! /( 1 "2$ /'/3#"$ ! 6$%!#3 '!# / "*"@)%$ 6$# %"<!#')' 63:" )'

Request !0!#W 2") 6)#) $ $&\! $ 6 !D/!' D/! 2$ 9( $%)' )' " 0$#()>Y!' %) #!D/'">7$ ) /)* %) 63:" )

Response !0!#W 2") )$ $&\! $ 6 !'6$ '! D/! #!6#!'! ) ) #!'6$' ) D/! '!#3 ! <")%) )$ &#$V'!# %$ /'/3#"$

Server !0!#W 2") )$ $&\! $ 6 !#<!# "*" 5E !' ! $&\! $ 6!#(" ! D/! <$2W 0)>) )*:/()' )#!0)' 2$($ ()6!)# $ 2)(" ?$ %$ '!#<"%$# ! #! $/ #$'

Você poderá usar estas propriedades em todo seu código, veja abaixo um exemplo onde iremos redirecionar o usuário para uma nova página.

(31)

Application Events (Eventos de aplicação)

Application Events não são tão importantes quanto os eventos que encontramos em nossos Server Controls, porém a casos em que necesitamos executar alguma tarefa adicional. Exemplo: Usando Application Events você poderá gravar fácilmente um log sempre que uma requisição for recebida.

Para capturarmos Application Events precisaremos usar o arquivo Global.asax Arquivo Glogal.asax

O arquivo global.asax permite que você escreva códigos de resposta a eventos globais da aplicação. Este eventos são chamados em vários pontos durante o ciclo de vida de uma aplicação web.

O arquivo globo.asax é parecido com o arquivo .aspx com exceção de que ele não contém nenhum HTML or ASP.NET tags, por outro lado contém declarações de eventos.

O seguinte arquivo global.asax irá reagir ao evento: Application.EndRequest, que acontecerá antes de da página ser enviada para o usuário.

<%@ Application Language="C#" %>

<script language="c#" runat="server">

protected void Application_OnEndRequest() {

Response.Write("<hr />Esta página foi processada às " + DateTime.Now.ToString());

}

</script>

Veja abaixo lista de eventos adicionais do arquivo Global.asax • Application_Start;

• Application_End;

• Application_BeginRequest; • Application_EndRequest; • Session_Start;

(32)

ASP.NET Configuration

Toda aplicação web possuí um arquivo web.config para setar configurações fundamentais de seu funcionamento. Configurações como Custom Erros (erros customizados), configurações de segurança, entre outros. O web.config possuí algumas vantagens, veja abaixo:

• Não há necessidade de parar a aplicação para alterar alguma configuração.

• Fácil acesso ao arquivo e replicação, uma vez que você possuí permissão de acesso ao servidor, você poderá remotamente alterar as configurações ou até mesmo copiar o web.config de uma aplicação para outra.

• Configurações de fácil entendimento humano, não há a necessidade de uma ferramenta especial para edição ou entendimento de seu conteúdo.

O arquivo Web.Config

O arquivo Web.Config usa o formato XML. Todo conteúdo deste arquivo esta dentro do elemento raiz (root) <configuration>. Dentro deste elemento existe vários outras sub#seções. Veja abaixo a estrutura básica de um arquivo web.Config com as três seções mais importantes:

<?xml version="1.0" ?> <configuration>

<appSettings>...</appSettings>

<connectionStrings>...</connectionStrings> <system.web>...</system.web>

</configuration>

Configurações Customizadas

O ASP.NET permite que você adicione no web.config configurações customizadas no elemento <appSettings>, veja abaixo a estrutura básica para adicionar configurações customizadas:

<?xml version="1.0" ?> <configuration>

<appSettings>

<add key=“DiretorioImagens” value=“C:\Luiz\Imagens” </appSettings>

</configuration>

(33)

Os HTML controls são muito limitados em relação aos web controls, por exemplo, uma HTML control corresponde a uma tag HTML enquanto um web control não possuí tal limitação. Por exemplo um único objeto como TextBox poderá assumir um entre três elementos: <input type=“text”>, <textarea>, <input type=“password”>.

Veja abaixo uma lista de Web Controls Básicos:`

ASP.NET Control HTML Element

Label span

TextBox input type=”text”

TextBox

TextMode=”MultiLine” textarea TextBox

TextMode=”Password” input type=”password”

Button input type=”submit”

LinkButton a href=”javascript:__doPostBack(’LinkButton1′,”)” ImageButton input type=”image”

HyperLink a

DropDownList select

ListBox select size=”4″ gives you 4 rows

ListItem option

CheckBox input type=”checkbox”

RadioButton input type=”radio” seguido de um label para apresentar o texto

RadioButtonList um table com tr e td, sendo um td para cada item da lista. Em cada td, há um conjunto de controles equivalente ao RadioButton

Image img

ImageMap img and a map tag holding one or more of the following 3: CircleHotSpot area shape=”circle”

PolygonHotSpot area shape=”poly” RectangleHotSpot area shape=”rect”

Table table

(34)

TableHeaderCell th

TableCell td

BulletedList ul with each list item:

ListItem li

HiddenField input type=”hidden”

Literal Sem html correspondente.

Calendar table complexa

AdRotator a

FileUpload input type=”file”

Wizard

uma table complexa. Isso se o estilo padrão for mantido. É possível definir

templates customizados para os passos do Wizard, deixa no layout mais amigável a padronizado, facilitando a aplicação de estilos.

Xml <?xml version=”1.0″ encoding=”utf#8″?>

MultiView MultiView não gera elementos html diretamente. Apenas seu conteúdo e controles são gerados.

Panel div

PlaceHolder

Placeholder não possui elemento html correspondente. O que será renderizado é referente aos controles que nele forem adicionados através do método

PlaceHolder.Controls.Add() não sequência em que forem adicionados. Substitution Sem html correspondente

Localize Sem html correspondente. O conteúdo é exibido diretamente Validation controls span

(35)

Uma Tag Web Control

As tags ASP.NET possuem um formato especial, elas sempre começam com o prefixo: asp: seguido do nome da classe. Se a mesma não possuir uma tag de fechamento a mesma é finalizada com />. Todos os atributos da tag poderão ser processados no servidor com exceção do atributo runat=server.

Veja o exemplo de um ASP.NET TextBox: <asp:TextBox ID="txt" runat="server" />

Quando um cliente requista uma página .aspx, o seguinte HTML é retornado: <input type="text" ID="txt" name="txt" />

WebControl base class

A maioria dos web controls são derivados da classe WebControl. Esta classe define funcionalidade essenciais como data binding e incluí propriedades que são usadas pela maioria dos web controls. Veja algumas propriedades abaixo:

AccessKey; Font;

BackColor, ForeColor, BorderColor; Height e Width;

BorderWidth; Page;

BorderStyle; Parent;

Controls; TabIndex;

Enabled; ToolTip;

(36)

Events e AutoPostBack

Muitos eventos como o Click ocorrem imediatamente, pois quando clicados eles o botão realiza o post back na página, o que é uma convensão básica nos HTML forms, porém outras ações podem causar a chamada de um evento mas não podem realizar um post back. Por exemplo, quando o usuário altera um texto de um TextBox ou escolhe um item em uma lista, você deseja responder aos eventos ocorridos porem sem um post back isto não será possível.

(37)

Uma das maiores diferenças entre os modelos de programação para web e o modelo de programação para desktop é o # (armazenamento de estado). Como você irá armazenar as informações no ciclo de vida de uma aplicação. Informações simples como nome do usuário, ou informações mais complexas como carrinho de compras de um e#commerce.

ViewState

Uma forma comum de armazenar informações é o $ . View state usa o elemento HTML hidden field, que o ASP.NET insere automaticamente no final da renderização da página. Anteriormente estudamos que os HTML server controls e web controls utilizam o view state para manter seus valores, porém o view state não é limitado a apenas web controls. Sua página poderá adicionar informações diretamente no view state da página e poderá recuperar tais informações quando a página for carregada novamente (post back).

ViewState Collection

A propriedade da página ViewState contém as informações do view state corrente da página. Esta propriedade é uma instância da classe StateBag. State Bag é um tipo de coleção chamado dictornary, neste tipo de coleção os itens são identificados por nome.

Exemplo:

this.ViewState[“Contador”] = 1;

Veja abaixo, o código para recuperar o valor da variavel do view state, Int32 contador = (Int32)this.ViewState[“Contador”];

Cross Page Posting

Cross#Page postback é uma extensão do mecanismo postback que permite enviar o usuário para outra página, enviando todas as informações. Para isto o ASP.NET tem uma nova propriedade chamada PostBackUrl, que esta definida na interface IButtonControl, os controles ImageButton, LinkButton e Button implementam esta interface.

Exemplo:

<asp:Button runat="server" ID="cmdPost" PostBackUrl="CrossPage2.aspx" Text="Cross#Page Postback" />

(38)

protected void Page_Load(object sender, EventArgs e) {

CrossPage1 prevPage = PreviousPage as CrossPage1;

if (prevPage != null) {

// Código de leitura das informações do web form.

}

}

(39)

Nenhum software executa livre de erros, aplicações web também não. Seu código poderá ser interrompido a qualquer momento, seja por um dado inválido, alguma circunstância não tratada até mesmo um erro de hardware.

Erros Comuns

Um erro pode ocorrer em várias situações, várias situações comuns como, a divisão por zero, a conexão com algum arquivo ou banco de dados.

Um tipo de erro muito comum é o erro de null reference excpetion, que ocorre quando tentamos acessar um objeto ainda não instanciado. Quando um erro ocorre em seu código o .NET verifica se existe algum tratamento de erro no escopo da execução do seu código ( ), caso nenhum tratamento de erro for encontrado, então a execução do seu código é abortada e uma página de erro é exibida no browser.

Exception Handling

A maioria das linguagens .NET possuem um formato para recuperar uma exceção ( ) ) % ! #). Quando um erro ocorre na sua aplicação, o .NET Framework cria uma exceção (exception), objeto quer irá representar o erro.

Toda exceção é derivada da classe % ! , esta classe possuí propriedades com informações do erro ocorrido, por exemplo se tentarmos acessar um objeto que ainda não foi instanciado, a propriedade Message terá o seguinte conteúdo: “Object reference not set to an instance of an object”.

Quando recuperarmos um erro no ASP.NET poderemos recuperar exceções genéricas ou exceções especificas, por exemplo se quisermos recuperar apenas erro de divisão por zero, poderemos verificar se a execeção ocorrida foi uma exceção do tipo+ $ 1 % ! .

Para recuperarmos um erro com .NET, veja a sintaxe abaixo: try {

// Código fonte.

}

catch {

// Código de tratamento do erro.

} finally {

// Código a ser executado mesmo que um erro tenha ocorrido.

(40)

Recuperando erros específicos: catch ( NullReferenceException erro) {

// Código de tratamento do erro.

} catch ( Exception erro) {

// Código de tratamento do erro.

}

Você poderá criar suas próprias exceções, basta criar uma instância do objeto Exception. Veja o código abaixo: private decimal DividirNumeros(decimal numero, decimal divisor) {

if (divisor == 0) {

CustomDivideByZeroException erro = new CustomDivideByZeroException();

erro.DividingNumber = numero;

throw erro;

} else {

return numero/divisor;

}

}

Log de Exceções

Em muitos casos necessitamos gravar logs, não só quando alguma exceção é detectada. O .NET possuí várias formas de gravação, seja enviando um e#mail, adicionando um registro em uma base de dados ou criar um arquivo. Através do .NET podemos gravar logs também no $ 2 do windows (que é disponível para qualquer aplicação).

Escrevendo um Log de Evento

Com o ASP.NET, poderemos criar facilmente Logs de Eventos, basta utilizarmos as classes do namespace System.Diagnostics. Primeiramente devemos importar tal namespace no inicio do código fonte.

(41)

O seguinte código irá gravar um log usando o Event Log:

public partial class ErrorTestLog : Page {

protected void cmdCompute_Click(Object sender, EventArgs e) {

try {

decimal a, b, result;

a = Decimal.Parse(txtA.Text);

b = Decimal.Parse(txtB.Text);

result = a / b;

lblResult.Text = result.ToString();

lblResult.ForeColor = System.Drawing.Color.Black;

} catch (Exception err) {

lblResult.Text = "<b>Message:</b> " + err.Message + "<br /><br />";

lblResult.Text += "<b>Source:</b> " + err.Source + "<br /><br />";

lblResult.Text += "<b>Stack Trace:</b> " + err.StackTrace;

lblResult.ForeColor = System.Drawing.Color.Red;

// Escrevendo as informações no Log de evento do windows.

EventLog log = new EventLog();

log.Source = "DivisionPage";

log.WriteEntry(err.Message, EventLogEntryType.Error);

}

}

}

O código acima irá gravar um log de evento no log chamada !! pois não informamos ao ASP.NET qual log o mesmo deveria gravar.

NOTA:

As aplicações web utilizam a conta de usuário ASPNET para realizar algumas tarefas no servidor, por exemplo, gravação de log no Event Viewer, e para que a gravação seja realizada com sucesso será necessário conceder permissão de gravação e leitura no Event Viewer para o usuário ASPNET ou grupo que o mesmo pertence, para isto basta conceder as devidas permissões na seguinte chave de registro (regedit.exe):

(42)

Log Customizados

Você poderá criar seus próprios $ #, por exemplo, se você quiser criar um log com o nome da sua empresa ou até mesmo o nome do sistema. Para isto veja o exemplo abaixo:

if (!EventLog.SourceExists("CVSistemas")) {

EventLog.CreateEventSource("Log de Eventos", "CVSistemas");

}

EventLog log = new EventLog("CVSistemas");

log.Source = "Log de Eventos";

log.WriteEntry(erro.ToString(), EventLogEntryType.Error);

Trace

As vezes precisamos recuperar as informações para verificarmos como nossa aplicação esta executando algum pedaço de código ou verificarmos suas regras de negócio. ASP.NET tem uma funcionalidade chamada #, que nos trás um relatório com o diagnóstico da execução das páginas web.

Habilitando Tracing

Para usarmos o tracing, precisamos habilitar explicitamente. Existe duas maneiras de habilitarmos o trancing em páginas ASP.NET:

<%@ Page Trace="true" ... %>

Ou através do código fonte da página

protected void Page_Load(Object sender, EventArgs e) {

Trace.IsEnabled = true;

}

O ASP.NET permite que você habilite o tracing para toda aplicação para isto basta utilizarmos o web.config, veja o exemplo abaixo:

<configuration>

<system.web>

<trace enabled="true" requestLimit="10" pageOutput="false" traceMode="SortByTime" localOnly="true" />

</system.web>

</configuration>

(43)

Escrevendo informações no Tracing

Para escrever uma mensagem no tracing, use o método Write(), método Warn() através do objeto Trace. Este métodos são equivalente com apenas uma diferença, o método Warn() escreve os logs com cor vermelha. Veja o exemplo abaixo:

private void ExibirDataHora() {

Trace.Write("Setando a data e hora do sistema.");

Try {

String data = textBoxDataHora.Text;

labelDataHora.Text = Convert.ToDateTime(data).ToString("dd/MM/yyyy HH:mm");

} catch (Exception erro) {

Trace.Warn(erro.Message);

}

(44)

! "#

No desenvolvimento de aplicação se faz necessário a realização de validações nos campos de entradas informados pelo usuário. O ASP.NET possuí alguns controles de validações são eles:

Controle Descrição

RequiredFieldValidator !#"0"2) '! $ /'/3#"$ " 0$#($/ $/ 7$ /( 2$ #$*! %! ! #)%)

RangeValidator !#"0"2) '! $ /'/3#"$ " 0$#($/ $/ 7$ /( <)*$# 2$ "%$ $ 2$ \/ $ %! 1(!#$E 2)#)2 !#!' $/ %) )'

CompareValidator !#"0"2) '! $ /'/3#"$ " 0$#($/ $/ 7$ /( <)*$# %! /( 2$ #$*! ":/)* )$ <)*$# %! $/ #$ 2$ #$*!

RegularExpressionValidator )*"%) '! $ /'/3#"$ " 0$#($/ /( <)*$# %! )2$#%$ 2$( ) !A6#!''7$ #!:/*)# " 0$#()%)

CustomValidator <)*"%)>7$ 9 #!)*"@)%) 6!*$ 2;%":$ %!0" "%$ 6!*$ /'/3#"$

Você poderá associar a um único controle de entrada (web control) um ou mais controles de validações. Validação do lado do servidor (Server Side Validation)

Uma prática comum é realizar a validação do envio de uma página manualmente em seu código fonte. Quando você utiliza validação automática, a página é iniciada normalmente e o usuário informa os dados dos controles da página, quando o usuário clica em algum botão para enviar a página para o servidor (submit form). Todos os botões da página possuem a propriedade CausesValidation, que pode assumir True ou False. O que acontece quando o usuário clica no botão:

Se a propriedade CausesValidation for False, o APS.NET ignora os controles de validação e a página é enviada (posted back)

Se a propriedade for True, o ASP.NET automaticamente irá validar a página quando o usuário clicar em algum botão. Se algum controle de validação encontrar algum erro, a página é retornada para o usuário com informações do erro.

Validação do lado do cliente (Client Side Validation)

(45)

Classe BaseValidator

Todo controle de validação são derivados da classe BaseValidor. Esta classe define as funcionalidades básicas dos controles de validações. Veja abaixo suas principais propriedades:

ControleToValidate ErroMessage

ForeColor Display

IsValid Enabled

EnabledClientScript Validação Simples

Para você melhor entender como os controles de validação funcionam, vamos criar uma página simples que irá usar um web controle Button e dois controles TextBox e usaremos os control RangeValidator para validar o primeiro TextBox, se a validação falhar uma mensagem será exibida para o usuário. Veja imagem abaixo:

A declaração do RangeValidator deve ser igual ao seguinte exemplo:

<asp:RangeValidator id="rangeValidator" runat="server" ErrorMessage="*Digite um número entre 1 e 10"

ControlToValidate="textBoxNumero" MaximumValue="10" MinimumValue="1" Type="Integer" />

Você poderá verificar em seu código fonte se a validação falhou ou não, para isto veja o exemplo abaixo: protected void cmdEnviar_Click(object sender, EventArgs e) {

if (rangeValidator.IsValid) {

(46)

Outras formas de exibição

O ASP.NET permite que você exiba as mensagens de erros em um outro local, por exemplo se você deseja exibir uma lista com todos os erros encontrados você poderá utilizar o controle2 ) . Este objeto irá exibir a lista de erros encontrados na página. Você deve setar a propriedade + ! dos controles de validação para .

Veja a declaração de um controle ValidationSummary: <asp:ValidationSummary id="listaErros" runat="server" />

Veja imagem abaixo:

Validações Customizadas

Com o controle CustomValidator você poderá realizar validações específicas de acordo com a regra de negócio da sua página. Por exemplo se você quiser validar o código do pedido de uma loja virutal, você poderá utilizar o CustomValidator e no código fonte de sua página você deverá criar o método que irá realizar as validações necessárias. Veja declaração do método de validação e atente para o argumento do tipo

(47)

protected void customValidator_ServerValidate(Object sender, ServerValidateEventArgs e) {

try {

e.IsValid = (e.Value == 10);

} catch {

e.IsValid = false;

}

}

Esta validação também poderá ser feita do lado do client utilizando JavaScript, basta declarar o método de validação no JavaScript da seguinte forma:

<script type="text/javascript">

function ValidarPedido(objeto, argumentos) {

var numero = argumentos.Value;

if (numero == 10) {

argumentos.IsValid= true;

} else {

argumentos.IsValid= false;

}

}

</script>

A declaração da tag do Custom Validator ficará da seguinte forma:

<asp:CustomValidator id="customValidator" runat="server" ErrorMessage="Código do pedido inválido"

ControlToValidate="textBoxCodigoPedido"OnServerValidate=" customValidator_ServerValidate "

(48)

$

Para aperfeiçoar o desenvolvimento de páginas web, o ASP.NET possuí o 0 , que é um eficiente modo de reutilizarmos pedaços da interface do usuário.

User Control se parece muito com web forms com algumas diferenças, são elas: Extensão do arquivo, os user controls possuem a extensão .ascx;

O arquivo .ascx começa com a diretiva <%@Control%> ao contrário de uma página que começa com <%@Page%>;

User Controls não podem ser requisitados pelo web browser, deve ser incluídos dentre de uma página web.

Veja abaixo um exemplo de um User Control <%@ Control Language="C#" AutoEventWireup="true"

CodeFile="Menu.ascx.cs" Inherits="Menu" %>

<div>

<!## Aqui vem o HTML do controle ##>

</div>

Para utilizar um User Control dentro de um web form você precisa registrar o controle no web form desejado. Para registrar um User Control dentro do seu web form use o <%@Register %> no inicio de sua página. Veja exemplo abaixo:

<%@ Page Language="C#" AutoEventWireup="true"

CodeFile="Inicio.aspx.cs" Inherits="Inicio"%>

(49)

%

Estilos (Style)

No desenvolvimento de páginas web, designer formatam seus documentos utilizando recursos de formatação do HTML, os recursos formatação do HTML as vezes são limitadas, inconsistentes.

Uma ótima solução é o padrão CSS suportado pela maioria dos browsers hoje em dia. CSS possui inúmeras propriedades de formatações consistentes para qualquer elemento HTML. Estilos como borda, fonte, cores entre várias outras.

Tipos de Estilos

Uma página web pode usar três tipos de formatação:

Inline style: São estilos aplicados diretamente na tag do elemento HTML; <p style="background: Blue">Este é um fundo azul.</p>

Internal Style sheet: São uma coleção de estilos que são colocados dentro da tag <head>;

External Style sheet: São uma coleção de estilos similar ao internal com uma diferença, os stilos são armazenados em um arquivo separado com extensão “ ”;

Themes (Tema)

Com a convensão do CSS Styles atualmente, os CSS rules são limitados por serem fixos. Os controles ASP.NET como Calendar, CheckBoxList por serem controles mais complexos não conseguem exibir as formatações corretamente, desta forma se quisermos colocar algum stilo nestes controles necessitamos coloca# los manualmente. O ASP.NET traz um novo recuso para resolver este problema, este recursos se chama Theme (tema).

Como Themes Funcionam

Todos os temas são aplicações específicas. Para utilizar um tema em sua aplicação web você deverá criar uma pasta para o mesmo. Esta pasta deverá ficar armazenada na pasta especial App_Themes, que deverá estar na raiz da sua aplicação web. Sua aplicação poderá conter vários temas, e todos eles deverão estar armazenados dentro da pasta App_Themes, porém cada um com sua própria pasta. Apenas um tema poderá esta ativo na página.

Para criar seu tema, você deve criar um 3 dentro de sua pasta, Um arquivo 3 é um arquivo texto com a extensão . 3 . Um arquivo skin é basicamente uma lista de tags de um controle. As tags de um controle dentro do arquivo de skin não precisa estar definitivamente completa, basta setar apenas as propriedades que você deseja padronizar (um tema pode conter mais de um skin). Por exemplo, se quiser padronizar as cores da fonte de um controle e o fundo do controle dentro através de um arquivo skin, use a seguinte sintaxe:

<asp:ListBox runat="server"ForeColor="White" BackColor="Orange"/>

(50)

Para aplicar um tema na sua página web, basta setar a propriedade Theme da diretiva de página com o nome da pasta do seu tema.

<%@ Page Language="C#" AutoEventWireup="true" ... Theme="AzulTheme" %>

(51)

Master Page

Muitas vezes no desenvolvimento de web sites, existem partes de uma página que desejamos adicioná#la em todas as páginas do site. Por exemplo, o menu de uma aplicação web, informações do usuário logado, entre outros.

Para resolvermos este problema sem a necessidade de duplicação de código, devemos utilizar a nova ferramenta

# do ASP.NET, Master Pages permiti que você defina uma estrutura básica para o web site, desta forma você poderá utiliza#lo em toda sua aplicação.

Uma Master Page é similar a uma página ASP.NET, você poderá incluir elementos HTML, web controls e códigos. Master pages possuem a extensão “ ”, uma master page não pode ser exibida diretamente no browser. Uma master page deverá utilizar outras páginas, que são conhecidas como ! # . Uma master page define a estrutura do site e as content pages definem a estrutura e conteúdo a ser exibido.

Criando uma Master Page

(52)

Utilizando uma MasterPage

Definir a(s) página(s) de conteúdo é simples e pode ser feito de quatro maneiras diferentes:

Durante a criação da página, na caixa de dialogo Add New Item, marque a opção Select Master Page

(53)

A segunda é através da própria pagina Master, selecionando a opção Add Content Page. Será criada uma página de conteúdo em branco. Você não poderá escolher o nome da página no momento da sua criação.

A terceira é de forma manual. Crie um Web Form normalmente, remova todo o HTML gerado, com exceção da diretiva de página. Adicione na diretiva de página o atributo MasterPageFile, que indica que esta é uma página de conteúdo que utiliza a Master Page especificada no atributo.

Finalmente, a quarta e última, é em tempo de execução: protected void Page_PreInit(object sender, EventArgs e) {

Page.MasterPageFile = "~/MasterUm.master"; }

A defninição de uma pagina Master em tempo de execução deve ser feito no evento PreInit da página. Obviamente que esta última forma nos priva dos benefícios da herança visual.

Trabalhando com uma Master Page

Nesta sessão vamos demonstrar de maneira prática como tirar proveito da utilização de uma Master Page. – Crie uma nova aplicação ASP.NET;

– Crie uma nova Master Page;

– Defina o layout da Master Page de acordo com a figura abaixo:

Detalhes do layout:

– Cor do fundo do Titulo: #FF9933 / Cor do fundo menu: #00CC66 – Fonte do titulo: Trebuchet MS, tamanho: 25px, cor da fonte: #333333 – Fonte do menu: Verdana, tamanho: 12px, cor da fonte: #333333

(54)

Master Page e múltiplos Content Regions (ContentPlaceHolder)

Master pages não são limitadas a apenas um ContentPlaceHolder, você poderá adicionar vários outros pontos onde a página será dividida. Veja o exemplo abaixo:

<form id="form1" runat="server">

<img src="ImagemTopo.jpg" /><br />

<asp:ContentPlaceHolder id="ConteudoPrincipal" runat="server"></asp:ContentPlaceHolder>

<i>

<div style="..."><b>Outros Links</b><br />

<asp:ContentPlaceHolder id="OutrosLinks" runat="server"></asp:ContentPlaceHolder>

</div>

Curso ASP.NET Básico CVSistemas Traning.

</i>

(55)

O ASP.NET traz na caixa de ferramentas (Toolbox) um novo controle destinados a navegação: SiteMap. O SiteMapPath possibilita criar de maneira muito simples um mapa de navegação do site, bastando cadastrar as urls e automaticamente ele já vai indicando em que url o usuário se encontra.

O primeiro passo é adicionar um arquivo Web.Sitemap, para isso vá ao Solution Explorer , projeto e depois Add New Item e escolha o template Site Map conforme abaixo. Esse template vai gerar o arquivo no formato XML que contém todos links do site que serão utilizados na navegação.

Confira o conteúdo do arquivo: <?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>

Você deve incluir na página o controle SiteMapDataSource, este objeto estará visível na parte de Design de sua página porém ele não será exibido na tela do usuário.

(56)
(57)

O ADO.NET confia suas funcionalidades a um pequeno conjunto de classe, que podem ser dividas em dois gurpos, algumas usadas para controlar e armazenar dados, como DataSet, DataTable ou DataRows). E aqueles que são usados para conectar a uma fonte de dados específicas, tais como Connection, Command e DataReader. As classes de controle e armazenamento são genéricas, não importa qua fonte de dados você irá utilizar em sua aplicação, uma vez que você extraiu os dados, os mesmos poderão ser armazenados nos diversos controles de armazenamento, especialmente em um DataSet. A idéia de um DataSet é manter a estrutura de um banco de dados porém em memória, podendo incluir tabelas, linhas, colunas.

O segundo grupo de classes existe em diversos fatores diferente. O conjunto de classes de interação com uma base de dados é chamado de +, ! $ . Os data providers são customizados de modo que cada um execute as interações com a fonte de dados específica. Por exemplo: SQL Data Provider foi criado para trabalhar com base SQL Server 7.0 ou superior, para se trabalhar com Oracle, existe o Oracle Provider e assim por diante.

As classes de provider são derivadas de uma mesma classe base, implementam a mesmas " que expõem métodos e propriedades comuns. O .NET possuí os seguintes Data Providers:

(58)
(59)

Data Namespaces

Veja a tabela abaixo com os namespaces do ADO.NET:

Namespaces Funções

System.Data $ 9( 2*)''!' 0/ %)(! )"' %! 2$(6Y! )' 0/ 2"$ )*"%)%!' %$ 2$($ ) ) ! E ) ) )&*! ! ! 2

System.Data.OleDb $ 9( )' 2*)''!' %! 2$ !A7$ ! !A!2/>7$ %! /() &)'! %! %)%$' ) #)<9' %$ E 2$($ *! & $ !2 "$ E *! & $(() %

System.Data.SqlClient $ 9( )' 2*)''!' %! 2$ !A7$ ! !A!2/>7$ %! /() &)'! %$ F !#<!# <!#'7$ , $/ '/6!#"$#E 2$($ F $ !2 "$ E F $(() %

System.Data.SqlTypes

$ 9( !' #/ /#) %$' "6$' %! %)%$' %! /() &)'! F !#<!#E %!' ) 0$#() D/) %$ 0$# #)&)*?)# 2$( !' ! "6$ %! &) 2$E /'! $' "6$' %!' !

)(!'6)2!

System.Data.OracleClient $ 9( )' 2*)''!' %! 2$ !A7$ ! !A!2/>7$ %! /() &)'! %$ #)2*!E 2$($ #)2*! $ !2 "$ E #)2*! $(() %

System.Data.Odbc $ 9( )' 2*)''!' %! 2$ !A7$ ! !A!2/>7$ %! /() &)'! ) #)<9' %$' #"<!'E 2$($ %&2 $ !2 "$ E %&2 $(() %

Veja abaixo lista de classe do ADO.NET Data Providers

– Connection (SQLConnection, OracleConnection, OleDbConnection, OdbcConnection) – Command (SQLCommand, OracleCommand, OledDbCommand, OdbcCommand) – DataReader (SQLDataReader, OracleDataReader, OleDbDataReader, OdbcDataReader) – DataAdapter(SQLDataAdapter, OracleDataAdapter, OleDbDataAdapter, OdbcDataAdapter)

Em todos os nossos exemplos utilizaremos uma base SQL Server, portanto importem o namespace da seguinte forma:

using System.Data;

using System.Data.SqlClient;

Criando uma conexão

(60)

User Id:Indica qual usuário será utilizada para acessar o banco de dados. Password:Indica a senha do usuário;

ConnectionTimeout:Determina quanto tempo seu código irá esperar (em segundos) para abrir uma conexão com o banco e dados, quando este tempo for alcançado uma exceção será lançada.

Veja abaixo um exemplo de uma ConnectionString:

Data Source=Servidor; Initial Catalog=Banco de dados; User Id=Usuário; Password=Senha

Você poderá utilizar o web.config para armazenar a string de conxão com o banco de dados a ser utilizado pela sua aplicação web, veja o código abaixo:

<configuration>

<connectionStrings>

<add name="Northwind" connectionString= "Data Source=localhost;Initial Catalog=Northwind;User Id=Teste Password=entrar"/>

</connectionStrings>

</configuration>

Para recuperar a string de conexão armazenada no arquivo de configuração da sua aplicação, veja o código abaixo:

String connectionString = WebConfigurationManager.ConnectionStrings["Pubs"].ConnectionString;

Para realizar a conexão com a base de dados utilize a classe SqlConnection, configure a string de conexão a ser utilizada e utilize o método Open() para abrir a conexão com a base de dados. Veja o código abaixo:

SqlConnectionsqlConnection= new SqlConnection(connectionString);

try

{

sqlConnection.Open();

lblInfo.Text = "<b>Versão Servidor:</b> " +sqlConnection.ServerVersion;

lblInfo.Text += "<br /><b>A Conexão esta:</b> " +sqlConnection.State.ToString();

(61)

Comando Select

O objeto de conexão possuí propriedades básicas para apenas conectar com uma base de dados, para recuperarmos informações da base de dados necessitaremos dos seguintes itens:

– Comando SQL para recuperação das informações da base; – Objeto Command para executar o comando SQL;

– Um objeto DataReader ou DataSet para acessar os registros retornados;

Um Objeto Command representa um comando SQL. Para usar um objeto Command, você deverá informar o comando SQL a ser executado uma conexão disponível e então execute o comando. Veja o exemplo abaixo:

SqlCommand sqlCommand = new SqlCommand();

sqlCommand.Connection = sqlConnection;

sqlCommand.CommandText = "SELECT * FROM Authors ORDER BY au_lname ";

OBS.: Você poderá usar o construtor do objeto Command para informar as propriedades visualizadas acima.

Usando um DataReader

Uma vez que seu objeto Command foi definido, você precisa decidir como você deseja recuperar as informações, a forma mais simples é o uso de um DataReader. Um DataReader mantém a conexão com a base de dados aberta enquanto lê os registros da base, ao finalizar a leitura dos registros você deverá fechar a conexão com a base caso contrário a mesma ficará aberta.

Antes de você usar um objeto DataReader assegur#se que sua conexão com a base de dados esteja aberta. Para criar um objeto DataRader use o método ExecuteReader() de um objeto Command. Veja o exemplo abaixo:

SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();

Com o objeto DataReader preenchido, você deverá utilizar o método Read() para recuperar um único registro do objeto.

sqlDataReader.Read()

Imagem

Table table

Referências

Documentos relacionados

Os relatos dos professores que participaram da pesquisa confirmaram o pouco cuidado dado aos jovens professores, o que segundo Nóvoa (2006) evidencia o fraco

A questão tipicamente usada pelos pesquisadores é: “Se você tivesse um amigo que não conhecesse nada sobre „tal personalidade política‟, o que você diria a

Quem pretender arrematar dito(s) bem(ns), deverá ofertar lanços pela Internet através do site www.leiloesjudiciais.com.br/sp, devendo, para tanto, os interessados,

1º - Após o fim dos prazos legais para interposição de recursos contra o Resultado Preliminar e respostas dos mesmos para os candidatos, fica divulgado o Resultado Oficial das

sociais Internos e externos - Feedback da Animadora; - Registo de presenças Resultados previstos e atingidos Proporcion ar momentos lúdicos e Recreativo s; Aumento

feira dos electrodomésticos Compre agora e comece a pagar a 30 de Setembro ou pague até 12 meses sem

B – Não é verdade que, pelo facto de um progenitor estar, momentânea ou permanentemente, impossibilitado de contribuir para os seus filhos a título de pensão de alimentos

Se eu delego uma atividade a dois profissionais, cada um vai desenvolver de uma maneira diferente, geralmente um possui mais desenvoltura do que outro