Você está na página 1de 166

TMSASP35AV

Novembro/2010
Apostila desenvolvida especialmente para a Target Informtica Ltda.
Sua cpia ou reprodu!o " e#pressamente proi$ida.
%ovem$ro&'()(
ASP.NET 4.0
Avanado
ASP.%*T 3.5 Avanado
Sumrio
1. Segurana................................................................................1
+$,etivos.............................................................................................................'
-onceitos de Segurana......................................................................................3
.a$ilitando o site para utili/ar o gerenciamento de segurana do Asp.%et 0.(. .5
*ntendendo o gerenciamento da segurana.................................................1
-riando 2surios e e#plorando a estrutura criada.........................................3
Validando usurios com o Login..................................................................))
2tili/ando o -4angePass5ord para trocar as sen4as...................................)'
*ntendendo e utili/ando os controles LoginStatus6 Login%ame e LoginVie5
....................................................................................................................)3
7erenciamento Manual de usurios..................................................................)8
-lasses Mem$ers4ip e Mem$ers4ip2ser.....................................................)3
2tili/ando 7rupos........................................................................................)9
*#erc:cios..........................................................................................................'3
*spao para Anota;es................................................................................'0
2. Globalizao e Localizao.......................................................25
+$,etivos...........................................................................................................'1
+ <ue " glo$ali/a!o e locali/a!o=..................................................................'8
Locali/ando valores em uma aplica!o asp.%et................................................'3
Tradu/indo interfaces do usurio com o asp.net...............................................3'
*#erc:cios..........................................................................................................33
*spao para Anota;es................................................................................39
3. Utilizando Comonente! no "S#.N$%.........................................&0
+$,etivos...........................................................................................................0)
+ <ue s!o componentes=..................................................................................0'
2tili/ando uma >LL e#terna.........................................................................03
Private Assem$l?s e S4ared Assem$l?s............................................................01
Analisando as refer@ncias............................................................................01
*spao para Anota;es................................................................................03
&. 'eb #art!...............................................................................50
+$,etivos...........................................................................................................5)
+ <ue s!o 5e$ parts =.......................................................................................5'
A ar<uitetura de Ae$ Parts..........................................................................53
+ Ae$PartManager e as Ae$Bones.............................................................53
2tili/ando as Ae$ Parts...............................................................................55
-onstruindo Ae$ Parts.................................................................................1)
*#erc:cios..........................................................................................................18
*spao para Anota;es................................................................................13
5. L(N).......................................................................................*+
+$,etivos...........................................................................................................8(
+ <ue " o LI%C..................................................................................................8)
LI%C T+ +DE*-TS...............................................................................................83
T@rgetTrust Treinamento & Tecnologia I
ASP.%*T 3.5 Avanado
LI%C to SCL.......................................................................................................83
*ntendendo o >ata-onte#t..........................................................................83
2tili/ando LI%C to SCL em nossa aplica!o.................................................89
2tili/ando LI%C to SCL em 3 camadas..............................................................31
*#erc:cios..........................................................................................................98
*spao para Anota;es................................................................................93
*. ,anuteno de $!tado.............................................................++
Session............................................................................................................)()
.iddenField......................................................................................................)(0
Vie5State...................................................................................................)(0
Cuer?String...............................................................................................)(5
-ooGies......................................................................................................)(1
Application.................................................................................................)(1
*#erc:cios........................................................................................................)(9
*spao para Anota;es..............................................................................))(
-. 'eb Service!........................................................................111
+$,etivos.........................................................................................................))'
Ae$ Services...................................................................................................))3
-riando e utili/ando um Ae$ Service..............................................................))5
-4amando um HML Ae$ Service por .TTP.....................................................))8
2tili/ando um Ae$Service e#terno..................................................................))9
*#erc:cios........................................................................................................)'3
*spao para Anota;es..............................................................................)'0
.. Utilizando "/"0 no "S#.N$%....................................................125
+$,etivos.........................................................................................................)'1
+ <ue " AEAH =.................................................................................................)'8
Por <ue usar AEAH no ASP.%*T=..................................................................)'8
2tili/ando A,a# em uma aplica!o Ae$.....................................................)'8
+ controle ScriptManager..........................................................................)'9
+ controle 2pdatePanel.............................................................................)3(
+ -ontrole 2pdateProgress........................................................................)3)
+ -ontrole Timer........................................................................................)3'
Triggers......................................................................................................)33
Inclus!o de Scripts via ScriptManager.......................................................)30
AEAH -ontrol ToolGit.........................................................................................)31
2tili/ando controles do A,a# -ontrol ToolGit.....................................................)33
Validator-allout*#tender...........................................................................)33
-ollapsi$lePanel*#tender..........................................................................)0(
Popup-ontrol*#tender...............................................................................)0)
*spao para anota;es...................................................................................)00
+. 1e2ection.............................................................................1&5
+$,etivos.........................................................................................................)01
+ <ue " IeJection=.........................................................................................)08
Funcionalidades e gan4os de utili/ar reJe#!o em nossa aplica!o...........)08
+ tipo Assem$l?.........................................................................................)08
T@rgetTrust Treinamento & Tecnologia II
ASP.%*T 3.5 Avanado
+ tipo Assem$l?%ame...............................................................................)03
+ tipo Module............................................................................................)09
Tra$al4ando com Tipos....................................................................................)5(
Iecuperando um o$,eto T?pe....................................................................)5(
2tili/ando IeJection em nossa aplica!o........................................................)5)
*spao para anota;es...................................................................................)51
10. 3i!tribuindo !ua "licao.....................................................15-
+$,etivos.........................................................................................................)53
>istri$uindo sua Aplica!o ASP.%*T................................................................)59
Pu$licando sua aplica!o...........................................................................)1(
*spao para Anota;es...................................................................................)1'
T@rgetTrust Treinamento & Tecnologia III
ASP.%*T 3.5 Avanado
).
).
Segurana
Segurana
T@rgetTrust Treinamento & Tecnologia 1
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
;b<etivo!
Ao Knal deste cap:tulo voc@ estar apto LM
-on4ecer o sistema de segurana de sites asp.net
implementados pelo .net frame5orG 0.(.
*ntender as diferenas entre as principais formas de
autentica!o dispon:veis no asp.net.
2tili/ar os controles de segurana do asp.net.
7erenciar grupos de usurios e atri$uir caracter:sticas de
permiss!o aos grupos.
T@rgetTrust Treinamento & Tecnologia 2
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
Conceito! de Segurana
7arantir a segurana de sites " uma <uest!o comple#a e critica para os
desenvolvedores de 5e$ sistes. Para garantir a segurana " necessrio um
plane,amento cuidadoso6 tanto os administradores do 5e$ site como os
programadores devem ter um claro entendimento das op;es de segurana
dispon:veis.
%o asp.net clssico e em outras linguagens de programa!o todo o
controle de segurana e de acesso aos sites6 $em como o gerenciamento de
usurios e seus respectivos privil"gios de acessos6 Kcam atrelados ao tra$al4o
do desenvolvedor responsvel por criar um mecanismo <ue gerencie toda essa
informa!o e esse controle.
+ Asp.net 0.( tra$al4a em con,unto com o Microsoft .%et Frame5orG 0.( e
o Microsoft Internet Information Service NIISO para a,udar a fornecer segurana
em nossas aplica;es Ae$. >esde a vers!o do ).) do .%et Frame5orG , e#istia
uma implementa!o para o gerenciamento de segurana de nossas aplica;es
5e$6 mas muitas coisas evoluiram.
%a vers!o 0.( do .net frame5orG temos duas fun;es principais de
seguranaM
Autori/ation.
Aut4entication.
A fun!o Autori/ation Limita direitos de acesso6 por permitir e negar
permiss;es6 para uma identidade autenticada e pr"Pesta$elecida
A fun!o Aut4entication a,uda a veriKcar se o usurio " realmente <uem
ele di/ ser. A aplica!o o$t"m credenciais de um usurio6 como nome e sen4a6
e validades as credenciais contra alguma autoridade. Se as credencias forem
validas ent!o o usurio realmente " <uem ele di/ ser.
7eralmente a fun!o autori/ation " utili/ada para identiKcar <uem tem o
privil"gio de acessar determinados ar<uivos via 5e$. E a fun!o
Aut4entication6 por ser mais dinQmica " amplamente utili/ada como o m"todo
de gerenciar o acesso de usurios em nossas aplica;es 5e$. *m fun!o de
ser mais utili/ada6 vamos direcionar nossos estudos so$re a fun!o
aut4entication.
+ Asp.%et implementa a aut4entication atrav"s de aut4entication
providers6 <ue cont"m o cdigo necessrio para autenticar as credencias do
usurio solicitante. Eunto com o asp.net temos dois aut4entication providers
pr" implementados.
Aindo5s Aut4entication Provider.
T@rgetTrust Treinamento & Tecnologia 3
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
Forms Aut4entication Provider.
A autentica!o $aseada no Aindo5s Aut4entication Provider utili/a o
usurio 5indo5s corrente no IIS como o usurio autenticado em uma aplica!o
Asp.net. *la " $em utili/ada para aplicativos asp.net do tipo Intranet para
aproveitar as credencias do usurio para ter permiss!o em determinados
diretrios.
A autentica!o $aseada no Forms Aut4entication Provider permite
autenticar usurios usando seu prprio cdigo e depois manter um toGen de
autenti!o em um cooGie ou no 2IL da pgina.
Para usar a autentica!o $aseada em formulrios voc@ cria uma pagina de
login <ue ir coletar as credencias dos usurios e deve incluir cdigo para
validar as credencias. %ormalmente a solu!o asp.net " conKgurada para
direcionar pagina de login sempre <ue o usurio tentar entrar em uma
pgina <ue s se,a disponi$ili/ada aps o usurio ser autenticado. Aps a
autentica!o6 se o usurio for um usurio com permiss!o ent!o ele "
direcionado para a pgina <ue ele tentou entrar antes6 sen!o ele tem o acesso
$arrado at" <ue ele se autenti<ue.
+ modelo de autentica!o por formulrios NForms Aut4enticationO "
amplamente utili/ado em desenvolvimentos de aplica;es 5e$.
2ma conveniente maneira para tra$al4ar com Forms Aut4entication "
utili/ar Asp.%et Mem$erS4ip e Asp.%et Login -ontrols. + Asp.%et Mem$erS4ip
permite arma/enar e gerenciar informa;es de usurios e inclui m"todos para
autenticar usurios.+ Asp.Login -ontrols s!o controles fornecidos pelo Asp.%et
<ue tra$al4am em con,unto com o Asp.%et Mem$erS4ip. +s controles
encapsulam a lgica para solicitar aos usurios credenciais6 validar os
usurios6 recuperar sen4as e outras a;es vinculadas com o gerenciamento de
usurios. + resultado disso " <ue o Asp.%et Mem$erS4ip e os Asp.%et Login
-ontrols fornecem uma camada de a$stra!o so$re a autentica!o por
formulrios. *sses recursos su$stituem a maior parte ou todo o tra$al4o <ue
voc@ normalmente teria <ue fa/er para utili/ar a autentica!o por formulrios.
T@rgetTrust Treinamento & Tecnologia 4
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
6abilitando o !ite ara utilizar o
gerenciamento de !egurana do "!.Net &.0
Ao criarmos um pro,eto no Visual Stuido '()( podemos utili/ar o template
RAsp.%et Ae$ ApplicationS. *sse template ir criar uma aplica!o asp.net com
as pginas responsveis por implementar a segurana dentro da pasta
c4amada Account. + pro,eto , estar conKgurado para utili/armos o
gerenciamento de segurana do asp.net.
Mas para entendermos como implementar de uma forma eKciente a
autentica!o $aseada em formulrios6 a aplica!o $ase de nosso curso "
$aseada no template RAsp.%et *mpt? Ae$ ApplicationS <ue " um template <ue
n!o cria nen4uma pgina pr" deKnida em nossa aplica!o. *sse template foi
utili/ado para <ue ns mesmos possamos esta$elecer a estrutura de
gerenciamento da segurana de nossa aplica!o.
Vamos criar uma pasta c4amada RSecurit?S em nossa aplica!o e vamos
inserir 0 5e$ forms dentro dessa pastaM Admin6 Login6 %e52ser e
-4angePass5ord.
A estrutura deve Kcar conforme a Kgura a$ai#o.
Aps termos criado essa estrutura6 com a pagina >efault.asp# setada
como pagina inicial6 vamos rodar nossa aplica!o e note <ue podemos navegar
livremente em nossa aplica!o.
Para <ue o nosso site utili/e a autentica!o por formulrios " necessrio
<ue se,a setada uma conKgura!o no ar<uivo 5e$.conKg de nossa aplica!o
asp.net.
>evemos conKgurar o 5e$.conKg da seguinte maneiraM
T@rgetTrust Treinamento & Tecnologia 5
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
*ssa conKgura!o deve ser inserida dentro da Tag Ts?stem.5e$U do
ar<uivo 5e$.conKg. %esta conKgura!o informamos <ue o modo de
autentica!o ser RFormsS e <ue o cooGie de autentica!o ser R.ASPHA2T.SNo
cooGie padr!o de autentica!o do asp.netO. Setamos tam$"m o formulrio
responsvel pela autentica!o do usurio e o formulrio default de nossa
aplica!o.
Agora vamos rodar nossa aplica!o6 com <ual<uer pgina setada como
pgina Na pagina Admin.asp# por e#emploO. %ote <ue continuamos navegando
livremente por <ual<uer pgina de nossa aplica!o 5e$. Isso ocorre por<ue
ns deKnimos o m"todo de autentica!o de nosso site6 mas n!o restringimos
ainda o acesso ao site.
Para <ue possamos restringir o acesso a nossa aplica!o devemos
adicionar a tag authorization no 5e$.conKg logo a$ai#o da tag authentication6
dentro da tag principal Ts?stem.5e$U. >entro dessa tag " conKgurado o n:vel
de autori/a!o de acesso <ue os usurios ter!o em nossa aplica!o 5e$.
Para desa$ilitar o aceso de usurios <ue n!o este,am autenticados em
nosso site devemos adicionar ao ar<uivo 5e$.conKg o seguinte cdigoM
Aps termos adicionado essa conKgura!o no 5e$.conKg6 deKna a pgina
>efault.asp# como a pgina inicial de nossa aplica!o e rode o sistema. Iremos
perce$er agora dois comportamentos diferentes do <ue estava ocorrendoM
Voc@ foi redirecionado para a pgina login.asp#. Isto ocorre por<ue
est " a pgina <ue ns conKguramos como a pgina onde o usurio
ir se autenticar para ter acesso ao nosso sistema e como ns
restringimos o acesso a usurios descon4ecidos6 agora somente
usurios autenticados poder!o navegar dentro de nosso 5e$ site.
%a url6 o asp.net adicionou informa;es da pgina <ue foi tentado o
acesso. Isso " necessrio para <ue o asp.net sa$ia para <ual pgina
ele deve redirecionar o site logo aps.
*ntendendo o gerenciamento da segurana
Agora <ue , trancamos o acesso de <ual<uer pessoa <ue n!o se
autenti<ue em nossa aplica!o devemos criar uma funcionalidade <ue
disponi$ili/e a usurios <ue criem contas para acesso em nosso site.
>ependendo do tipo de aplica!o essa pgina s ser acessada por
administradores de sistema ou pode ser uma pgina <ue ten4a livre acesso.
T@rgetTrust Treinamento & Tecnologia 6
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
2m e#emplo prtico seria um sistema de um frum onde para ter acesso o
usurio deve ser cadastrar no sistema. >essa forma a pgina de cria!o de
usurios teria livre acesso e as pginas do frum s seriam acessadas por
usurios logados.
%a montagem das pginas de nossa aplica!o ns deKnimos uma pgina
responsvel por criar novos usurios c4amada R%e52ser.asp#S. Vamos
conKgurar em nossa aplica!o <ue o acesso pgina de cria!o de usurios
pode ser pV$lica6 como no e#emplo do frum.
Para <ue possamos conKgurar uma pgina com acesso pV$lico devemos
adicionar uma nova c4ave aps o fec4amento do n Ts?stem.5e$U6 a c4ave
location. >entro da c4ave location iremos apontar o camin4o da pgina <ue ela
ir gerenciar e iremos criar6 dentro da c4ave location uma nova refencia ao
Ts?stem.5e$U e iremos conKgurar uma nova authorization6 <ue gerenciar
somente a pgina apontada pela location.
2ma das grandes desvantagens de trancar o acesso ao conteVdo de nosso
site6 como K/emos em nossa aplica!o6 " <ue todo o conteVdo Kca
desa$ilitado para intera!o com o usurio. Voc@ pode conKrmar esse
pro$lema6 se rodar a aplica!o novamente e limpar o cac4e do navegador Nctrl
W f5 no ieO. Aps limparmos o cac4e do navegador iremos perce$er <ue toda a
formata!o de la?out de nosso site reali/ada a partir dos ar<uivos css foi
perdida. Isso ocorre por<ue o usurio ainda n!o se autenticou e est proi$ido
de acessar o conteVdo da pasta <ue arma/ena os ar<uivos css. Para contornar
esse pro$lema devemos 4a$ilitar o acesso de todos os usurios para as pastas
<ue contem ar<uivos css6 ,avascripts e outros conteVdos <ue o sistema deve
utili/ar sem <ue o usurio este,a logado no sistema.
Para 4a$ilitarmos o acesso de usurios n!o autenticados a pgina de
cria!o de usurios e aos ar<uivos de css devemos inserir o seguinte cdigo no
ar<uivo 5e$.conKgM
Aps termos inserido esse cdigo no 5e$.conKg vamos inserir um te#to na
pgina de login de nossa aplica!o e um 4?perlinG <ue ir redirecionar um
usurio para a pgina de cria!o de contas de usurios. >essa forma ser
poss:vel <ue um usurio <ue n!o ten4a nen4uma conta possa se registrar em
nosso sistema.
T@rgetTrust Treinamento & Tecnologia 7
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
Agora vamos rodar nosso sistema com a pgina >efault.asp# setada como
pgina inicial de nossa aplica!o. Poderemos ver <ue automaticamente
seremos redirecionados para a pgina de Login e agora teremos um 4?perlinG
<ue nos redirecionar para a pgina de cria!o de usurios. Podemos reparar
<ue tanto a pgina de usurios como a conKgura!o de la?out NcssO voltaram a
ser acess:veis por usurios <ue n!o est!o logados em nosso sistema.
+ pr#imo passo " inserirmos a funcionalidade de cria!o de usurios6
por<ue at" agora apenas disponi$ili/amos a navega!o at" a pgina de
cria!o de usurios6 mas a pgina ainda n!o possui nen4uma funcionalidade.
-riando 2surios e e#plorando a estrutura criada
+ Visual Studio '()( disponi$ili/a o controle -reate2serAi/ard. *sse
controle " responsvel por toda a cria!o de novos usurios <ue estar!o
vinculados com nossa aplica!o. Todo o gerenciamento de cria!o de usurios
est encapsulado dentro do controle.
Para utili/armos esse controle $asta adicionarmos o controle em nossa
pgina de cria!o de usurios. + controle possui diversas propriedades de
customi/a!o. X interessante <ue voc@ d@ uma ol4ada nas propriedades do
controle para ter uma id"ia da capacidade de personali/a!o.
Seguindo a constru!o de nossa aplica!o6 agora vamos adicionar o
controle -reate2serAi/ard ao formulrio %e52ser.asp#. + cdigo do formulrio
deve Kcar conforme a Kgura a$ai#o.
T@rgetTrust Treinamento & Tecnologia 8
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
Aps ter inserido esse cdigo no %e52ser.asp#6 colo<ue o formulrio em
modo design6 cli<ue com o $ot!o direito so$re o controle6 selecione a op!o
Auto Format e selecione o sc4ema Professional e apli<ue. -om isso iremos
dei#ar o nosso controle com uma apar@ncia pr"PdeKnida.
Agora vamos rodar a nossa aplica!o6 iremos ir direto para a pgina de
login6 utili/aremos o atal4o para navegar at" a pgina de cria!o de usurios e
iremos reali/ar um cadastro de nosso usurio para navegar em todo o nosso
sistema.
+ preenc4imento do controle ser como o da Kgura a$ai#o.
Aps termos criado o usurio o controle muda de apar@ncia e informa <ue
o usurio foi criado com sucessoY
T@rgetTrust Treinamento & Tecnologia 9
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
Aps termos criado o usurio vamos voltar em nossa aplica!o e vamos
e#plorar a estrutura criada pelo asp.net para gerenciamento dos dados
referentes aos usurios do sistema.
Para e#plorarmos a estrutura criada devemos ir ao Solution *#plorer e
e#pandir a pasta AppZ>ata6 note <ue dentro desta pasta foi criado um $anco
SCL *#press c4amado ASP%*T>M.M>F. >entro deste $anco estar!o as ta$elas
responsveis por arma/enar todos os usurios e informa;es relacionadas L
segurana em nossa aplica!o.
Ao darmos um duplo cli<ue so$re o $anco de dados ser a$erta a ,anela
>ata$ase *#plorer. >essa forma poderemos analisar toda a estrutura de
ta$elas de nosso $anco de dados. Visuali/e os dados da ta$ela aspnetZ2sers e
perce$a <ue os dados do usurio cadastrado est!o arma/enados dentro desta
ta$ela.
T@rgetTrust Treinamento & Tecnologia 10
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
2ma das grandes limita;es de tra$al4ar com o modelo de gerenciamento
de segurana do asp.net " <ue ele tra$al4a em con,unto com o $anco
ASP%*T>D.M>F e muitas ve/es <ueremos <ue a segurana tra$al4e em
con,unto com nossa aplica!o. Para contormar esse pro$lema devemos
implementar um Mem$ers4ip Provider apontado para a nossa $ase de dados.
Cuando implementamos um Mem$erS4ip Provider estamos so$reescrevendo
as funcionalidades de gerenciamento de segunana do asp.net e estamos
adotando a nossa implementa!o como o gerenciador de segurana. Para mais
detal4es de como implementar um Mem$erS4ip Provider consulte o seguinte
linGM 4ttpM&&msdn.microsoft.com&enPus&li$rar?&1tc08t85.asp#.
Validando usurios com o Login
Aps termos criado um usurio para acessar nossa aplica!o devemos
agora preparar uma tela de login6 onde o usurio ir entrar com suas
credenciais e o sistema ir validar se ele realmente " <uem ele di/ ser e caso a
resposta se,a positiva o sistema deva permitir o livre acesso do usurio a reas
<ue a ela se,am permitidas.
Para e#ecutar o processo de valida!o do usurio o asp.net disponi$ili/a o
controle Login. Toda a lgica de controle de acesso do usurio est
encapsulada dentro do controle.
Para implementarmos essa funcionalidade em nossa aplica!o6 vamos na
pgina Login.asp# e vamos arrastar um controle login para dentro de nosso
form6 a$ai#o da tag de fec4amento do pargrafo NTpUT&pUO. Para dei#armos o
visual com um aspecto legal " interessante adicionar uma lin4a NT$r &UO entre
o Knal do pargrafo e o nosso controle. Aps termos inserido o controle vamos
deKnir o estilo do controle como Professional. + resultado deve Kcar igual L
Kgura a$ai#o.
Vamos rodar o sistema6 ao digitarmos o usurio e a sen4a correta seremos
direcionados para a pgina >efault.asp#6 caso digitemos usurio ou sen4a
errado6 Kcaremos trancados na tela de login.
-om esse controle o asp.net gerencia todo o controle de acesso ao nosso
sistema e n!o precisamos programar nen4uma lin4a.
T@rgetTrust Treinamento & Tecnologia 11
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
2tili/ando o -4angePass5ord para trocar as sen4as
+utra funcionalidade importante <ue todo o gerenciamento de segurana
deve possuir e a possi$ilidade de trocar as sen4as dos usurios da aplica!o.
+ asp.net disponi$ili/a o controle -4angePass5ord. *sse controle "
responsvel por gerenciar a troca de sen4as dos usurios. Para utili/Plo $asta
arrastar o controle para dentro de um 5e$ form. Toda a regra de negcio ,
est encapsulada dentro do controle. %s n!o precisamos escrever nen4uma
lin4a de cdigo para <ue o controle funcione.
Para implementarmos essa funcionalidade em nossa aplica!o6 vamos na
pgina -4angePass5ord.asp# e vamos inserir o controle em nosso formulrio.
+ cdigo do 5e$ form deve Kcar conforme a$ai#o.
Aps ter inserido o controle conKgure o controle para utili/ar o estilo
Professional. >evemos tam$"m inserir um atal4o de navega!o para a tela de
trocar sen4a em nossa aplica!o. Para isso insira o cdigo a$ai#o na pgina
Main.master logo a$ai#o do fec4amento da div <ue utili/a a class RtitleS.
Agora vamos rodar nossa aplica!o6 note <ue somente conseguiremos
navegar para a pgina de trocar a sen4a aps termos logado no sistema. +
resultado d pgina de trocar a sen4a deve ser igual a Kgura a$ai#o.
T@rgetTrust Treinamento & Tecnologia 12
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
Aps termos reali/ado a altera!o de uma sen4a o controle deve
apresentar uma mensagem informando <ue a altera!o foi reali/ada com
sucesso.
2m comportamento <ue nossa aplica!o est tendo <ue n!o " legal "
sempre apresentar para o usurio a op!o de trocar a sen4a6 mesmo <ue o
usurio n!o este,a logado. + correto " apresentar essa op!o somente para
<uem , se logou no sistema. Veremos adiante como podemos resolver esse
pro$lema.
*ntendendo e utili/ando os controles LoginStatus6
Login%ame e LoginVie5
Podemos ver em nossa aplica!o <ue ainda n!o criamos nen4um atal4o a
tela de login e nem uma op!o para o usurio efetuar o logout do sistema.
Para implementarmos essa funcionalidade podemos utili/ar o controle
LoginStatus <ue o asp.net fornece.
+ controle LoginStatus funciona como um atal4o para o login ou para o
loginout do usurio. + controle funciona com duas visuali/a;esM Logged +ut6
<ue funciona <uando o usurio n!o est autenticado e a visuali/a!o Logged In
<ue funciona <uando o usurio , se autenticou em nosso sistema.
Para entendermos o funcionamento do LoginStatus vamos utili/aPlo em
nossa aplica!o. Vamos na pgina Main.master e vamos adicionar um controle
LoginStatus logo acima do 4?perlinG de trocar sen4a. %o controle LoginStatus
vamos deKnir a vis!o como Logged+ut e vamos rodar nossa aplica!o.
%ote <ue en<uanto n!o nos logamos no sistema o te#to <ue o controle
apresenta " RLoginS e sempre <ue clicarmos no controle seremos
redirecionados para a pgina de login. Aps termos nos logado o controle ir
apresentar o te#to Logout. Cuando clicarmos no controle LoginStatus e ele
estiver apresentando a op!o de logout o nosso cooGie de autentica!o ser
e#clu:do e seremos redirecionados para a pgina de login para novamente nos
autenticarmos em nossa aplica!o.
T@rgetTrust Treinamento & Tecnologia 13
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
+utra funcionalidade importante em aplica;es 5e$ " apresentar o nome
do usurio <ue est logado no sistema. Para isso temos o controle Login%ame.
*sse controle simplesmente apresenta o nome do usurio autenticado em
nossa aplica!o.
Para termos um efeito mais proKssional em nossa aplica!o utili/amos a
propriedade formatString para mesclar te#tos ,untamente com o nome do
usurio.
Vamos implementar essa funcionalidade em nossa aplica!o. Vamos na
pgina Main.master e vamos adicionar o seguinte cdigo logo acima do
controle LoginStatus.
Agora vamos rodar nossa aplica!o6 en<uanto n!o estivermos logado
nen4uma mensagem ser apresentada6 mas aps nos logarmos em nosso
sistema ser apresentado L mensagemM RSe,a $emPvindo Nnome do usurio
<ue se logouOS.
Podemos perce$er <ue a op!o de Trocar Sen4a sempre Kca vis:vel6
mesmo <ue o usurio n!o este,a autenticado. E levantamos essa <uest!o e
apontamos como uma fal4a de design em nossa aplica!o. Para resolvermos
isso podemos utili/ar o controle LoginVie5.
+ controle LoginVie5 tem como o$,etivo e#i$ir determinado conteVdo
<uando o usurio estiver autenticado e outro conteVdo en<uanto o usurio n!o
se autenticar em nosso sistema.
T@rgetTrust Treinamento & Tecnologia 14
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
+ controle " formado por dois templatesM Anon?mous e Loggedin. %o
template Anon?mous colocaremos o conteVdo <ue <ueremos <ue se,a
apresentado <uando o usurio n!o este,a autenticado e no template Loggedin
colocaremos o conteVdo <ue <ueremos <ue se,a apresentado <uando o usurio
se autenticar.
Para entendermos mel4or esse funcionamento vamos em nossa aplica!o6
na pgina Main.master e vamos alterar o conteVdo <ue est dentro da div <ue
utili/a a class Rlogin>ispla?S. Vamos adicionar um loginVie5 e dentro do
template anon?mous vamos adicionar uma la$el <ue ir informar para o
usurio <ue n!o tem nen4um usurio logado no sistema e dentro do template
Loggedin vamos colocar o nosso 4?perlinG de trocar a sen4a. + cdigo deve
Kcar conforme a$ai#oM
Agora vamos rodar a nossa aplica!o. *n<uanto o usurio n!o se loga o
loginvie5 ir e#i$ir a la$el informando <ue o usurio n!o se logou.
Aps o usurio ter se logado o loginvie5 ir apresentar o 4?perlinG de
trocar a sen4a.
T@rgetTrust Treinamento & Tecnologia 15
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
T@rgetTrust Treinamento & Tecnologia 16
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
Gerenciamento ,anual de u!u=rio!
Vimos at" agora como podemos implementar segurana em nossas
aplica;es asp.net utili/ando os controles disponi$ili/ados pelo asp.net. +s
controles encapsulam todas as regras de negcio e funcionam de uma forma
pr"PdeKnida em seu desenvolvimento.
Muitos programadores simplesmente n!o gostam de dei#ar o
gerenciamento de uma funcionalidade t!o importante6 como a segurana do
site6 ao cargo de controles em <ue o programador n!o consegue gerenciar
todo o Ju#o de tra$al4o. Pensando em disponi$li/ar uma maior Je#i$ilidade ao
programador o .net frame5orG disponi$ili/a todas as funcionalidades de seus
controles dentro de classes <ue est!o na namespace S?stem.Ae$.Securit?.
>essa forma tudo <ue vimos at" agora podemos implementar manualmente.
%a ta$ela a$ai#o " apresentado algumas das classes dispon:veis no
S?stem.Ae$.Securit? e suas funcionalidades.
Cla!!e >uncionalidade
Mem$ers4ip Iesponsvel por validar credenciais de
usurios e gerenciar conKgura;es de
usurios.
Mem$ers4ip-reate2ser*#ception Arma/ena os poss:veis erros ao criar
novos usurios.
Mem$ers4ipPass5ord*#ception Arma/ena os poss:veis erros refentes a
sen4as dos usurios.
Mem$ers4ipProvider >eKne os contratos de implementa!o
do mem$ers4ip provider do asp.net
com providers customi/ados.
Mem$ers4ip2ser Iesponsvel por $uscar e atuali/ar
informa;es do usurio na $ase de
dados.
Ioles 7erencia a participa!o do usurio em
grupos de fun;es.
*m fun!o de possuirmos muitas classes nesse namespace estamos
citando apenas algumas classes. Para um estudo mais aprofundado de todas
as op;es acesseM 4ttpM&&msdn.microsoft.com&enPus&li$rar?&Gt5ssstG.asp#
T@rgetTrust Treinamento & Tecnologia 17
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
-lasses Mem$ers4ip e Mem$ers4ip2ser
*ssas duas classes podem ser consideradas as mais importantes <uando
<ueremos implementar manualmente o gerenciamento de segurana. A$ai#o
vamos listar alguns dos principais m"todos dessas classes.
-lasse Mem$ers4ip
o -reate2ser [ -ria um novo usurio.
o >elete2ser [ *#clui um usurio.
o Find2serD?*mail [ Locali/a usurios a partir do email
cadastrado.
o Find2serD?%ame [ Locali/a usurio a partir do nome.
o 7eneratePass5ord [ 7era um sen4a rand\mica.
o 7etAll2sers [ Ietorna uma cole!o com todos os usurios.
o 2pdate2ser [ Atuali/a as informa;es do usurio.
o Validate2ser [ Validad se o nome do usurio e a sen4a s!o
vlidos.
Para mais informa;es so$re a classe Mem$ers4ip acesse o
seguinte linGM 4ttpM&&msdn.microsoft.com&enP
us&li$rar?&s?stem.5e$.securit?.mem$ers4ip.asp#
-lasse Mem$ers4ip2ser
o -reation>ate [ >ata e 4ora de cria!o do usurio.
o *mail [ Ietorna ou seta o email de um determinado usurio.
o Is+nline [ Indica se o usurio est online.
o Pass5ordCuestion [ Ietorna a <uest!o da sen4a <ue o usurio
cadastrou.
o -4angePass5ord [ Altera a sen4a de um usurio.
o IesetPass5ord [ Ieseta a sen4a do usurio6 gerando
automaticamente uma nova sen4a.
Para mais informa;es so$re a classe Mem$ers4ip2ser acesse o
seguinte linGM 4ttpM&&msdn.microsoft.com&enP
us&li$rar?&s?stem.5e$.securit?.mem$ers4ipuser.asp#.
T@rgetTrust Treinamento & Tecnologia 18
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
2tili/ando 7rupos
*studamos os m"todos de gerenciamentos de usurios implementados com
controles e com o au#ilio de classes manuais6 mas ainda falta entendermos
como funcionam os 7ruposNrolesO dos usurios.
7rupos servem para deKnir perKs dos usurios <ue est!o vinculados a ele.
Por e#emplo6 normalmente em um sistema temos o grupo administrativo <ue
tem acesso a todas as funcionalidades do sistema e temos o grupo operacional
onde os usurios deste grupo t@m acesso a algumas pginas <ue usurios n!o
autenticados n!o possuem e n!o tem acesso a algumas pginas <ue somente
usurios do grupo administrativo t@m.
+ gerenciamento de grupos de usurios n!o " reali/ado com controles.
>eve ser implementado pelo programador. + Ju#o de tra$al4o " de gerar
grupos e associar o grupo com os usurios <ue devem fa/er parte dele.
Para entendermos o funcionamento dos grupos de usurios vamos
implementPlo em nossa aplica!o.
Primeiramente devemos 4a$ilitar em nossa aplica!o o gerenciamento de
grupos de usurios. Por padr!o essa op!o " desa$ilitada. Para isso devemos
inserir o seguinte cdigo no 5e$.conKg de nossa aplica!o dentro da tag
Ts?stem.5e$U.
Aps termos conKgurado nossa aplica!o para utili/ar o gerenciamento de
grupos vamos adicionar uma pgina6 na pasta Securit?6 c4amada
cad7rupos.asp# e vamos incluir uma op!o no menu de acesso a essa pgina.
+ comportamento <ue <ueremos em nossa aplica!o " criar um grupo
c4amado admin e somente usurios vinculados com o grupo admin possuam
acesso a pgina Radmin.asp#S <ue est dentro da pasta securit? em nossa
aplica!o.
Para isso vamos criar na pgina cad7rupos.asp# as seguintes
funcionalidadesM
2ma listagem apresentando todos os usurios cadastrados.
2ma cai#a de te#to e um $ot!o onde o usurio ir digitar o nome do
grupo e o $ot!o ir criar esse grupo.
2ma listagem <ue ir apresentar todos os grupos criados.
2m $ot!o <ue ir associar os usurios do sistema com os grupos
dispon:veis.
Para conseguirmos essa interface vamos inserir o seguinte cdigo na
pgina cad7rupos.asp#.
T@rgetTrust Treinamento & Tecnologia 19
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
Cuando renderi/armos nossa pgina ela deve Kcar com o seguinte
aspecto.
+ pr#imo passo " carregarmos a listDo# de usurios com todos os
usurios dispon:veis e gerarmos um m"todo <ue ir carregar a listDo# de
grupos com todos os grupos dispon:veis.
T@rgetTrust Treinamento & Tecnologia 20
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
Vamos inserir o seguinte cdigo na pgina cad7rupos.asp#.
%ote <ue estamos atuali/ando a listDo# de usurios sempre <ue
carregamos a pagina e colocamos o carregamento da listDo# de grupos no
m"todo R7ruposZ>ata$indS. -riamos o m"todo R7ruposZ>ata$indS para <ue
esse m"todo possa ser reaproveitado em mais de uma situa!o em nossa
pgina.
+ pr#imo passo " criarmos o cdigo do $ot!o RAdicionar 7rupoS. Vamos
dar um duplo cli<ue no $ot!o e vamos inserir o cdigo a$ai#o.
*sse cdigo ir c4amar o m"todo -reateIole passando o nome do grupo
<ue foi digitado na Te#tDo#6 dessa forma criando um novo grupo. Aps criar o
grupo o m"todo c4ama o m"todo para atuali/ar a listDo# de grupos e limpa a
Te#tDo#.
Ioda sua aplica!o e crie um grupo c4amado admin.
+ pr#imo passo " criarmos a funcionalidade de vincular usurios com
grupos de usurios. Para isso vamos inserir o cdigo a$ai#o no evento clicG do
$ot!o RVincular usurios com grupo NN$tnVincular2suario7rupoO.
T@rgetTrust Treinamento & Tecnologia 21
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
%este cdigo " pego o nome do usurio <ue est selecionado na listDo# de
usurios e o nome do grupo <ue est selecionado na listDo# de 7rupos e "
reali/ado a vincula!o entre o usurio e o grupo atrav"s do m"todo
Add2serToIole.
+ pr#imo passo " Adicionar o cdigo do $ot!o 7rupos do usurio6 <ue ir
apresentar todos os grupos vinculados com o usurio <ue est selecionado na
listDo# de usurios. Para isso vamos inserir o seguinte cdigo do evento clicG
do $ot!o grupos de usurio.
Agora vamos rodar nossa aplica!o e vamos criar um novo usurio6 este
usurio n!o ir ser vinculado com nen4um grupo e ir servir para testarmos se
realmente a aplica!o ir trancar o acesso de usurios <ue n!o est!o
vinculados com o grupo admin podem ter acesso a pagina Admin.asp#. Aps
termos criado o novo usurio vamos na pgina de grupos e vamos vincular o
usurio <ue estamos utili/ando em nossa aplica!o com o grupo Admin. Aps
termos efetuado o vinculo selecione o primeiro usurio na cai#a de listagem e
cli<ue em grupos de usurio e ve,a o grupo admin sendo mostrado como uma
grupo vinculado6 aps selecione o novo usurio e cli<ue em grupos de usurios
e note <ue nen4um grupo ser apresentado.
Agora temos <ue garantir <ue somente usurios do grupo admin possam
acessar a pgina Admin.asp#6 para isso vamos adicionar o seguinte cdigo em
nosso 5e$.conKg6 logo a$ai#o do fec4amento da tag location referente a
pgina RSecurit?&ne52ser.asp#S.
A estrutura do n " muito semel4ante a estrutura criada para gerenciar a
pagina %e52ser.asp#. A diferena " <ue a<ui negamos todos os acessos a
pgina menos os de usurios <ue pertencem ao grupo admin.
Agora crie um atal4o para a pgina Admin.asp# no menu da Master Page6
rode o sistema6 primeiro acesse com o novo usurio criado e note <ue n!o
consegue acessar a pgina. Tro<ue o usurio logado para o usurio <ue est
vinculado ao grupo admin e perce$a <ue agora " possivel acessar a pgina.
T@rgetTrust Treinamento & Tecnologia 22
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
$9erc8cio!
). -rie uma aplica!o 5e$ <ue implemente os controles de segurana do
asp.net 0.(.
'. Iefaa os controles de segurana de sua aplica!o gerenciando todas
as funcionalidades de segurana manualmente.
3. Vincule seus usurios com grupos pr"PdeKnidos e apresente conteVdo
personali/ado para os usurios em virtude dos grupos <ue eles est!o
vinculados. Lem$rePse <ue um usurio pode estar vinculado com mais de um
grupo.
T@rgetTrust Treinamento & Tecnologia 23
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
*spao para Anota;es
T@rgetTrust Treinamento & Tecnologia 24
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
'.
'.
7lo$ali/a!o e
7lo$ali/a!o e
Locali/a!o
Locali/a!o
T@rgetTrust Treinamento & Tecnologia 25
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
;b<etivo!
Ao Knal deste cap:tulo voc@ estar apto LM
-on4ecer os recursos de locali/a!o e glo$ali/a!o do
ASP.%et.
Formatar os dados de suas paginas asp.net respeitando a
cultura do $ro5ser.
2tili/ar os recursos de tradu!o local e glo$al em sua
aplica!o ASP.%et
T@rgetTrust Treinamento & Tecnologia 26
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
; ?ue @ globalizao e localizaoA
7lo$ali/a!o " o processo de criar uma aplica!o <ue atenda as
necessidades de usurios de mVltiplas culturas. *ste processo envolve muito
mais do <ue simplesmente tradu/ir elementos de interface do usurio da
aplica!o em mVltiplas linguagens6 ele tam$em inclui usar o sinal da moeda
corrente6 formato de data&4ora6 calendrio6 etc. Acomodar essas diferenas
culturais em uma aplica!o " c4amado de locali/a!o.
Locali/ar uma aplica!o ASP.%*T signiKca a,ustar a aplica!o a cultura
corrente do $ro5ser do usurio6 fa/endo com <ue dados se,am apresentados
em um formato familiar do usurio. A$ai#o alguns e#emplos de dados <ue
sofrem interfer@ncia pela locali/a!oM
Formato de >ata
o -ada pa:s possui uma nota!o padr!o para datas. *#emploM
Drasil utili/a o padr!o dd&mm&aaaa] *2A utili/a mm&dd&aaaa
Idioma
o Seria como tradu/ir o seu aplicativo para dois ou mais
idiomas.
Formato de moeda
o Tal <ual o formato de data6 cada pa:s tem sua nota!o padr!o
para moeda. Por e#emplo6 Drasil utili/a I^999.999699] *2A
utili/a 2^9996999.99
*#istem dois tipos de cultura a serem consideradas em um aplicativo
ASP.%*TM
_ -ulture P Iesponsvel pela formata!o de dados a serem utili/ados pelo
sistema Ndata6 moeda etc.O]
_ 2I-ulture P Iesponsvel pela formata!o dos recursos a serem
apresentados na interface com o usurio6 isso "6 tradu!o dos dados
e#istentes no Ae$ Form NconteVdo e propriedades de controles comoM la$els6
$ot;es6 t:tulos6 tooltips etc.O.
+ .%et Frame5orG 0.( suporta um m:nimo de 350 culturas diferentes6
tendo evolu:do de um m:nimo de '(3 culturas no .net frame5orG 3.5. Muito
dessas culturas s!o culturas neutras <ue foram inclu:das para adicionar
informa;es a culturas pais.
T@rgetTrust Treinamento & Tecnologia 27
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
Localizando valore! em uma alicao
a!.Net
Para <ue uma aplica!o asp.net e#i$a para o usurio dados locali/ados
em uma determinada cultura " necessrio <ue se,a conKgurado o parQmetro
culture. *ste parQmetro " responsvel por informar ao asp.net como ele deve
proceder em rela!o a dados de locali/a!o dentro da aplica!o.
+ parQmetro culture pode ser conKgurado das seguintes maneirasM
>etectar automaticamente a cultura do usurio]
>etectar automaticamente a cultura do usurio e caso n!o gerencie
a cultura corrente utili/ar uma cultura padr!o]
Forar a utili/a!o de uma determinada cultura.
Agora para alcanarmos um entendimento da utili/a!o de culturas6
vamos conKgurar nossa aplica!o para tra$al4ar com culturas.
-omo nossa aplica!o tra$al4a com Master.Pages vamos colocar um
controle na master <ue estar integrado com as culturas e outro controle na
pgina >efault.asp#. Vamos colocar em dois lugares diferentes para
acompan4armos os cuidados <ue devemos ter ao utili/ar culturas nas
Master.Pages.
Primeiro passo devemos adicionar o seguinte cdigo em nosso ar<uivo
Site.css.
Aps termos inserido o tratamento visual para a tag 4' dentro da div Title6
vamos atuali/ar o cdigo da div Title do Main.master conforme a$ai#o.
T@rgetTrust Treinamento & Tecnologia 28
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
+ pr#imo passo " inserirmos o seguinte cdigo na pagina de cdigos do
Main.master.
-om estas altera;es sempre <ue entramos em nossa aplica!o iremos
apresentar a data atual no ca$eal4o de nossa Main.master.
Agora o pr#imo passo " atuali/ar a pgina >efault.asp# com controles
<ue ir!o apresentar a data na pgina. + primeiro passo " atuali/ar a tag 4'
com o seguinte cdigo.
+ pr#imo passo " atuali/ar o code $e4ind d mesma forma <ue K/emos
com a main.master. A$ai#o o cdigo <ue deve ser inserido na default.asp#.cs.
%o e#emplo acima inserimos uma la$el <ue ir apresentar a data e a 4ora
atual tanto na pgina default.asp# como na main.master. Ao e#ecutarmos a
nossa aplica!o " possivel visuali/ar a formata!o dos dados de acordo com as
conKgura;es regionais do servidor em <ue a aplica!o est sendo e#ecutada.
Mas devemos nos preocupar <ue em aplica;es <ue atendam diferentes
culturas6 as conKgura;es regionais do servidor n!o s!o as mesmas
conKgura;es regionais do usurio. 2ma forma de detectarmos <ual " a
cultura do usurio " a partir da conKgura!o regional do seu $ro5ser. Se o
$ro5ser " um internet *#plorer podemos veriKcar o seu idioma a partir do
seguinte camin4oM
Menu ferramentas]
+p;es de internet]
A$a 7eral6 $ot!o idiomas]
T@rgetTrust Treinamento & Tecnologia 29
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
Vamos deKnir a l:ngua americana para ser o idioma default do $ro5ser e
vamos rodar nossa aplica!o. Podemos ver <ue nen4uma mudana de
comportamento ocorre <uando mudamos o idioma do $ro5ser. Para <ue a
aplica!o entenda <ue deve utili/ar a cultura do $ro5ser do usurio devemos
adicionar o parQmetro culture na diretiva da pagina default.asp#. %ote <ue a
main.Master n!o possui o parQmetro culture em suas op;es. Isso ocorre
por<ue todas as Master Pages 4erdam de S?stem.Ae$.2I.2ser-ontrol e as
diretivas referentes a glo$ali/a!o est!o dentro de S?stemAe$.2I.Page.
Para continuarmos nosso e#erc:cio devemos conKgurar >efault.asp#
conforme a imagem a$ai#o.
Vamos rodar novamente nossa aplica!o6 note <ue na tela de login o
campo data <ue est na master Page est mostrando a data com o formato em
portugu@s Nou a conKgura!o regional do computador <ue voc@ est
utili/andoO. Aps logarmos a aplica!o seremos redirecionados para a pgina
>efault.asp# e o campo data tanto da pgina default.asp# como da master
Page estar!o apresentando o formato da data em ingl@s Nlevando em conta
<ue voc@ est usando o idioma ingl@s em seu $ro5ser6 caso n!o este,a
utili/ando colo<ue o idioma do $ro5ser para ingl@sO.
%avegue entre as op;es do menu e note <ue <uando sa:mos da pgina
default.asp# o campo data da master page muda o formato da data
apresentado. *sse comportamento ocorre por<ue a master page implementa a
cultura da pgina Kl4a <ue ela est apresentando. Para <ue n!o ten4amos
esse comportamento devemos conKgurar a cultura dentro do 5e$.conKg.
Sempre <ue conKguramos a cultura no 5e$.conKg6 esta conKgura!o ir
reJetir em todo o sistema. *sta " uma op!o muito vanta,osa para ns
T@rgetTrust Treinamento & Tecnologia 30
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
programadores. Image a seguinte situa!oM Temos uma aplica!o asp.net <ue
possui apro#imadamente '(( 5e$ forms. Para setarmos as diretivas de Culture
de todos os 5e$ forms ter:amos <ue entrar em cada um deles e conKgurar na
sua diretiva de pagina o valor do parQmetro Culture. Fa/endo com <ue
ten4amos um grande tra$al4o manual. Se conKgurarmos no 5e$.conKg $asta
uma Vnica lin4a de cdigo e toda nossa aplicaca!o ir utili/ar as diretivas de
cultura especiKcadas no 5e$.conKg.
-onKguramos o 5e$.conKg com a seguinte diretiva dentro da tag
Ts?stem.5e$U.
Aps termos atuali/ado nosso 5e$.conKg rode a aplica!o e note <ue a
data apresentada na master page n!o sofre mais altera;es <uando mudamos
de pgina. Agora todas as pginas de nosso sistema utili/am a mesma cultura.
*#iste situa;es em <ue a cultura do $ro5ser n!o " suportada pelo .net
frame5orG 0.(. %este caso a cultura utili/ada " a do servidor.
-aso e#ista a necessidade de forar uma cultura especiKca <uando o .net
frame5orG n!o suporte a cultura do $ro5ser o parQmetro culture ser
conKgurado da seguinte maneira.
%o e#emplo acima <uando a aplica!o n!o suportar a cultura do $ro5ser
ir utili/ar a cultura portuguesa do Drasil NPTPDIO como cultura default da
pgina.
T@rgetTrust Treinamento & Tecnologia 31
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
%raduzindo interBace! do u!u=rio com o
a!.net
2m aspecto fundamental para <ue aplica;es multiculturais ten4am
sucesso na integra!o com usurios de diferentes culturas " a tradu!o de
todas as interfaces de usurios <ue s!o apresentados pela aplica!o.
+ parQmetro responsvel por gerenciar a linguagem de apresenta!o dos
recursos de interface " o 2I-ulture.
Podemos deKnir como recursos de interface do usurio propriedades como
te#t e tooltip de uma te#tDo#. + gerenciamento de 2I-ulture ir $uscar o valor
apropriado em um ar<uivo de recurso e ir su$stituir o valor dessas
propriedades com o valor contido dentro do ar<uivo de recurso corresponde a
cultura do $ro5ser do usurio. >essa forma " possivel <ue um usurio com seu
$ro5ser deKnido com o idioma em ingl@s visuali/e a aplica!o em ingl@s e um
usurio com o idioma franc@s visuali/e a aplica!o em franc@s.
A$ai#o vamos reali/ar um e#erc:cio prtico para <ue possamos visuali/ar
uma aplica!o sendo apresentada em diversos idiomas. %este caso vamos
preparar algumas partes da aplica!o <ue estamos desenvolvendo nesse curso
para apresentar alguns te#tos de acordo com o idioma do $ro5ser do cliente.
+ primeiro passo " irmos a nossa pgina >efault.asp# e su$stituir os
te#tos digitados na pgina por la$els. + asp# da pgina deve Kcar conforme a
Kgura a$ai#o.
Agora nossa pgina possui duas la$els Nl$lDemVindo e l$lIntro-ursoO <ue
apresentam os te#tos da pgina em portugu@s. Apesar de termos colocado
nossos te#tos dentro de controles asp.net da forma como a pgina est ainda
n!o " possivel gerenciar <ual<uer tradu!o para as interfaces de nossa pgina.
+ asp.net disponi$ili/a duas formas de tradu/ir nossas interfaces com o
usurio.
Tradu!o por pgina]
Tradu!o glo$al do sistema]
T@rgetTrust Treinamento & Tecnologia 32
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
%a tradu!o por pgina devemos vincular um ar<uivo6 <ue ir gerenciar o
conteVdo apresentado por cada idioma6 a cada 5e$form de nossa aplica!o. +
ar<uivo responsvel por gerenciar o conteVdo " do tipo resource.res# " deve
ter seu nome igual ao nome da pagina acrescentado com o nome da cultura
<ue ele gerencia. Por e#emplo uma pagina c4amada menu.asp# ter como um
ar<uivo de recurso c4amado menu.en.res# responsvel pela tradu!o para o
idioma ingl@s e um ar<uivo de recurso c4amado menu.fr.res# responsvel pela
tradu!o para o idioma franc@s.
+s ar<uivos de recursos devem Kcar contidos dentro da pasta
RappZLocalIesourcesS. *ssa pasta " uma pasta especiKca do asp.net. Para
4a$ilitarmos essa pasta devemos clicar com o $ot!o direito em nosso 5e$ site6
dentro do solution *#plorer6 e ir L op!o add asp.net folder e selecionar a pasta
appZLocalIesources. Todos os ar<uivos de recursos para tradu!o por paginas
dever!o ser inseridos6 o$rigatoriamente6 dentro desta pasta.
Seguindo nosso e#erc:cio agora vamos inserir ar<uivos de recurso para a
pgina >efault.asp#. >evemos inserir um ar<uivo de recurso sem fa/er
mens!o a nen4um idioma6 esse ar<uivo de recurso ser o default de nossa
pgina6 e outro ar<uivo de recurso referente ao idioma ingl@s.
+ primeiro passo " inserirmos o ar<uivo de recurso default de nossa
pgina Nem portugu@sO. Aps adicionarmos a pasta appZLocalIesource em
nossa solu!o6 vamos clicar com o $ot!o direito em cima dela e adicionarmos
um novo item NAdd ne5 item...O. + tipo do item deve ser uma resource Kle e o
nome do ar<uivo ser >efault.asp#.res#
T@rgetTrust Treinamento & Tecnologia 33
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
>entro do ar<uivo de recursos ser colocado todas as c4aves de tradu!o
referente aos controles da pagina >efault.asp# do nosso e#emplo. + ar<uivo de
recurso " formato por uma listagem de 3 colunas. A primeira coluna " o nome
da c4ave de tradu!o6 a segunda coluna ser o valor da tradu!o e a terceira
coluna " um comentrio. A primeira e a segunda coluna s!o o$rigatrias e a
terceira coluna " opcional.
+$rigatoriamente o nome da c4ave de tradu!o dever ter o seguinte
formatoM nomeacha!e"#ro#rieae dessa forma " poss:vel vincular uma
propriedade a c4ave de tradu!o6 informando assim <ual propriedade do
controle <ue deve ter seus valor trocado pelo valor do ar<uivo de recurso
associado a pgina. Isso " importante6 pois possi$ilita <ue um controle ten4a
diferentes propriedades suas tradu/idas com diferentes valores.
%o e#emplo acima podemos ver o ar<uivo de recurso associado a pagina
>efault. + pr#imo passo " inserirmos outro ar<uivo de recurso6 o ar<uivo de
recurso deve ser c4amado >efault.asp#.en.res#6 devemos inserir as mesmas
c4aves <ue inserimos no ar<uivo de recurso anterior6 Vnica coisa <ue devemos
mudar s!o as propriedades value6 <ue agoram devem conter o te#to <ue deve
ser apresentado <uando o idioma do usurio for o idioma ingl@s.
+ ar<uivo de recurso em ingl@s deve Kcar conforme a Kgura a$ai#o.
T@rgetTrust Treinamento & Tecnologia 34
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
+ pr#imo passo " alterar nossa pagina para <ue ela utili/e a glo$ali/a!o
de interface. Para <ue a pagina entenda <ue deve tradu/ir seus elementos de
interface deve ser modiKcado o parQmetro 2I-ulture da pagina para true.
+ atri$uto 2I-ulture tam$"m pode ser conKgurado dentro do 5e$.conKg
na tag 7lo$ali/ation para <ue ele ten4a efeito em todo o sistema.
+ pr#imo passo " vincular os controles da pagina com a sua c4ave do
ar<uivo de recurso. Para isso utili/amos o atri$uto metaMresource`e?. *sse
atri$uto " o elo de liga!o entre o controle e o ar<uivo resource`e?. Cuando
utili/amos o metaMresource`e? n!o " mais necessrio preenc4er as
propriedades do controle <ue ser!o tradu/idas6 como por e#emplo a
propriedade Te#t.
A$ai#o podemos ver como Kcar a pagina >efault.asp# com seus
controles vinculados ao ar<uivo de resource atrav"s do metaMresource`e?.
Se rodarmos nossa aplica!o e Kcarmos alternando o idioma do $ro5ser
entre portugu@s e ingl@s iremos ver nosso conteVdo de interface tradu/ido na
linguagem do $ro5ser.
A outra forma de tradu/ir nossos elementos de interface " a tradu!o
glo$al do sistema. *ssa forma " a mais utili/ada em pro,etos .net devido a sua
facilidade de manuten!o e reaproveitamento de cdigo. Imagine a seguinte
situa!oM 2m pro,eto tem apro#imadamente '(( 5e$ forms diferentes e este
pro,eto deve ser tradu/ido para 5 idiomas. Se utili/armos a tradu!o por
paginas ent!o ter:amos 5 ar<uivos de resources para cada pagina. Somente de
ar<uivo de resources ter:amos )((( ar<uivos em nosso pro,eto. A grande
T@rgetTrust Treinamento & Tecnologia 35
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
vantagem da tradu!o glo$al do sistema " <ue e#iste um ar<uivo de resource
por idioma e este ar<uivo de resource pode ser utili/ado por <ual<uer 5e$
form de nosso pro,eto. %a situa!o 4ipot"tica <ue aca$amos de levantar
ter:amos apenas 5 ar<uivos de resource em nosso pro,eto ao inv"s de )(((
ar<uivos.
%a tradu!o glo$al os ar<uivos de resources devem Kcar dentro da pasta
RappZ7lo$alIesourcesS. *ssa pasta " uma pasta especiKca do asp.net. Para
4a$ilitarmos essa pasta devemos clicar com o $ot!o direito em nosso 5e$ site6
dentro do solution *#plorer6 e ir na op!o add asp.net folder e selecionar a
pasta appZ7lo$alIesources. Todos os ar<uivos de recursos para tradu!o
glo$al dever!o ser inseridos6 o$rigatoriamente6 dentro desta pasta.
A diferena dos ar<uivos de resources <ue atuam em forma glo$al " <ue a
c4ave n!o pode possuir .#ro#rieae. *las somente ir!o ter um nome. Isso "
necessrio por<ue o ar<uivo glo$al n!o Kca vinculado a nen4uma pgina e a
utili/a!o de suas c4aves deve ser conKgurada manualmente dentro das
propriedades dos controles de interface.
Prosseguindo em nosso e#erc:cio6 vamos inserir dois ar<uivos de resources
glo$ais dentro de nossa aplica!o. 2m c4amado 7lo$al.res#6 <ue ser o
resource default de nossa aplica!o6 e o ar<uivo 7lo$al.en.res# <ue ser o
resource glo$al responsvel pelos elementos de tradu!o da l:ngua inglesa em
nossa aplica!o.
*m nossos ar<uivos de resource vamos criar uma c4ave c4amada
msgTeste. %o ar<uivo 7lo$al.res# o valor da c4ave msgTeste ser RTeste em
portugu@sYS e no ar<uivo 7lo$al.en.res# o valor da c4ave msgTeste ser RTeste
em Ingl@sYS.
Agora vamos na pagina >efault.asp# e iremos inserir uma la$el6 logo
a$ai#o do pargrafo de introdu; do curso6 com a seguinte sinta#eM
T@rgetTrust Treinamento & Tecnologia 36
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
>iferentemente da tradu!o por pgina em <ue o atri$uto
metaMresource`e? se encarregava de vincular o controle com a c4ave do
resource6 na tradu!o glo$al " inserido um cdigo asp# dentro da propriedade
<ue <ueremos <ue apresente seu valor tradu/ido. %a la$el l$lMsgTeste est
sendo conKgurado <ue na propriedade Te#t ir aparecer o valor da c4ave
msgTeste do ar<uivo resource c4amado 7lo$al.
Agor vamos rodar nossa aplica!o e iremos perce$er <ue se o idioma de
nosso $ro5ser for ingl@s ser e#i$ido na l$lMsgTeste o te#to RTeste em ingl@sYS
sen!o6 se o idioma for portugu@s ou <ual<uer outro6 ser e#i$ido o te#to RTeste
em portugu@sYS.
T@rgetTrust Treinamento & Tecnologia 37
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
$9erc8cio!
). Implementa a tradu!o6 por pgina6 na pgina de login.
'. Faa com <ue a nossa aplica!o suporte o idioma franc@s.
3. Implementa tradu!o glo$al na pgina master.
T@rgetTrust Treinamento & Tecnologia 38
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
*spao para Anota;es
T@rgetTrust Treinamento & Tecnologia 39
ASP.%*T 3.5 Avanado
3.
3.
2tili/ando -omponentes
2tili/ando -omponentes
no ASP.%*T
no ASP.%*T
T@rgetTrust Treinamento & Tecnologia 40
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
;b<etivo!
Ao Knal deste cap:tulo voc@ estar apto LM
Tra$al4ar com mVltiplos pro,etos no Visual Studio.%*T
2tili/ar >llas e#ternas
Instanciar classes de outros assem$l?s
T@rgetTrust Treinamento & Tecnologia 41
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
; ?ue !o comonente!A
>esde as primeiras vers;es das ferramentas de desenvolvimento
Microsoft6 umas das caracter:sticas mais marcantes nestas ferramentas " a
capacidade de utili/armos recursos para reutili/a!o de cdigo. %as aplica;es
ASP.%*T isto n!o " diferente. Cuando constru:mos uma aplica!o em ASP.%*T6
o ideal " tentarmos dividir a aplica!o em mdulos menores6 a Km de tornar o
gerenciamento e a manuten!o da aplica!o mais facilitada.
Para criarmos uma aplica!o mais modulari/ada podemos fa/er uso de
componentes no ASP.%*T. +s componentes s!o $locos de cdigo compilados
em um assem$l? N>LLO <ue podem ser utili/ados em diversas aplica;es. Para
criarmos um componente6 devemos criar um pro,eto do tipo -lass Li$rar?. *ste
tipo de pro,eto nos permite a cria!o de classes <ue podem conter $oa parte
da lgica da aplica!o. >esta forma6 conseguimos modulari/ar a aplica!o em
diversas classes ao inv"s de termos toda a codiKca!o da aplica!o inserida
diretamente nas pginas ASP.%*T.
T@rgetTrust Treinamento & Tecnologia 42
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
2tili/ando uma >LL e#terna
Para entendermos a utili/a!o de >llas e#ternas6 vamos implementar a
funcionalidade do 7oogle maps em nossa aplica!o.
Pege a >LL 7Maps no site N 4ttpM&&googlemaps.su$gurim.net&descargar.asp#
O e adicione referencia em nosso pro,eto da >ll gmaps.dll.
>epois disso6 adiciona em sua Ae$.conKg um TAppSettingsU e uma TGe?U
+ pr#imo passo " criarmos um novo 5e$ form em nossa aplica!o
c4amado RMapaS. Aps criarmos o formulrio vamos adicionar um item no
menu principal6 para <ue possamos navegar at" esse formulrio.
+ pr#imo passo " criarmos o conteVdo do asp# de nosso formulrio. %este
e#erc:cio vamos disponi$ili/ar para o usurio uma interface onde ele possa
digitar latitude6 longitude e comentrio de um ponto e <uando ele clicar em
um $ot!o6 vamos apresentar o 7oogle Maps apontando para a locali/a!o <ue
o usurio escol4eu.
+ cdigo do asp# deve Kcar conforme a imagem a$ai#o.
+ pr#imo passo " inserirmos o cdigo fonte em nosso formulrio. Vamos
dar dois cli<ues no $ot!o processar e inserir o cdigo a ser e#ecutado.
+ cdigo fonte total de nosso 5e$ form deve Kcar conforme a imagem
a$ai#o.
T@rgetTrust Treinamento & Tecnologia 43
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
Ao e#ecutar nossa aplica!o6 no campo latitude colo<ue P3(6()81(0 e no
campo longitude colo<ue P5)6)9)3)5 e no campo comentrio colo<ue RTbrget
TrustS. Vamos clicar no $ot!o processar e iremos visuali/ar a tbrget trust no
7oogle maps.
T@rgetTrust Treinamento & Tecnologia 44
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
-om esse e#erc:cio podemos ver como " simples e fcil a utili/a!o de >llas
e#ternas em nossas aplica;es .net6 onde aps inserirmos a refer@ncia6 da dll
e#terna6 em nosso pro,eto podemos comear a utili/ar suas classes e seus
o$,etos livremente6 da mesma forma <ue utili/amos as funcionalidades do .net
frame5orG.
T@rgetTrust Treinamento & Tecnologia 45
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
#rivate "!!embl7! e S5ared "!!embl7!
Se voc@ estiver construindo um componente para um pro,eto do tipo Ae$
Site6 note <ue <uando voc@ adiciona a refer@ncia do componente ao site e
compila o pro,eto6 o Visual Studio automaticamente copia a >LL resultante da
compila!o do pro,eto para a pasta DI% do 5e$ site.
A pasta DI% " o repositrio padr!o para componentes de um 5e$ site.
Cuando o .%*T Frame5orG carrega um 5e$ site para e#ecu!o ele
automaticamente carrega todas as >LLs presentes na pasta DI%6 considerando
<ue estas >LLs s!o utili/adas pelo site para suas opera;es.
>evemos colocar na pasta DI% do 5e$ site todas as >LLs .%*T as <uais o
5e$ site fa/ uso6 aKm de <ue o 5e$ site funcione da maneira correta.
As dlls <ue se encontram na pasta DI% s!o c4amadas private assem$l?s6
pois s!o dlls utili/adas apenas para a<uela aplica!o6 ou se,a6 para <ue a
aplica!o fa/ uso delas " preciso <ue elas este,am na pasta DI% da aplica!o.
Analisando as refer@ncias
*m um pro,eto 5e$6 temos como veriKcar <uais componentes nosso
pro,eto est fa/endo uso. Para isto6 $asta clicar com o $ot!o direito so$re o
5e$ site no Solution *#plorer e selecionar a op!o RPropert? PagesS. A
seguinte tela ser apresentada.
%esta tela podemos adicionar novas refer@ncias atrav"s do $ot!o Add
Ieference.
T@rgetTrust Treinamento & Tecnologia 46
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
Se tentarmos incluir um componente da a$a R.%*TS ao inv"s da a$a
Pro,ect ou Dro5se6 iremos perce$er um comportamento diferente para estes
componente. Se adicionarmos ao Pro,ect o componente S?stem.Transactions
por e#emplo6 ao compilarmos o pro,eto6 podemos perce$er <ue a >LL deste
componente n!o " adicionada a pasta DI% do pro,eto. Isto ocorre por<ue estes
assem$l?s s!o c4amados assem$l?s compartil4ados Ns4ared assem$l?sO. Tais
assem$l?s est!o dispon:veis para toda a m<uina na <ual est!o registrados.
2m e#emplo de s4ared assem$l?s s!o os prprios componentes do .%*T
Frame5orG N<ue iniciam com preK#o S?stemO. *stes componentes n!o
re<uerem uma cpia na pasta Din pro,eto6 pois est!o dispon:veis glo$almente
para a m<uina.
Para veriKcarmos o conteVdo do 7lo$al Assem$l? -ac4e6 $asta a$rirmos o
Aindo5s *#plorer e acessarmos a pasta cAI%>+AScAssem$l?.
T@rgetTrust Treinamento & Tecnologia 47
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
*spao para Anota;es
T@rgetTrust Treinamento & Tecnologia 48
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
T@rgetTrust Treinamento & Tecnologia 49
ASP.%*T 3.5 Avanado
0.
0.
Ae$ Parts
Ae$ Parts
T@rgetTrust Treinamento & Tecnologia 50
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
;b<etivo!
Ao Knal deste cap:tulo voc@ estar apto LM
-ompreender as Ae$ Parts do ASP.%*T.
2sar as Ae$ Parts padr!o em um pgina Ae$.
-riar uma Ae$ Part personali/ada.
2sar a Ae$ Part personali/ada em uma pgina da Ae$.
T@rgetTrust Treinamento & Tecnologia 51
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
; ?ue !o :eb art! A
2m dos grandes aspectos $uscados por aplica;es 5e$ s!o uma
interatividade maior com o usurio6 onde o usurio possa deKnir aspectos de
customi/a!o pessoais6 atingindo dessa forma uma gama maior de poss:veis
usurios. As customi/a;es <ue os usurios podem fa/er v!o desde
comportamentos de controles6 sele!o de conteVdo at" o posicionamento de
o$,etos de nossa pgina.
Pensando nesse aspecto a Microsoft trou#e para o .net o conceito de 5e$
parts do S4arePoint. %o inicio dos anos '((( o S4arePoint surgiu como uma
forma altamente avanada para as organi/a;es criarem portais e am$ientes
de cola$ora!o. + s4arepont introdu/iu alguns compontentes pr"Pfa$ricados
para facilitar a cria!o de sites cola$orativos Nao inv"s de criPlos desde o
inicioO. As paginas da Ae$ com S4arePoint s!o $aseadas em um tipo de
componente denominado Ae$ Parts6 <ue servem para reunir informa;es e
funcionalidades para os usurios. Apesar das 5e$ parts do .net n!o serem
e#atamente a mesma coisa <ue as 5e$ parts do S4arePoint6 elas operam de
forma muito semel4ante.
As Ae$ Parts s!o6 de certa forma6 muito parecidas com os controles
personali/ados6 pois proporcionam uma forma de personali/ar o .TML gerado
pelo seu aplicativo. >iferentemente de controles personali/ados <ue derivam
da classe $%stem"&e'"(I"Control ou $%stem"&e'"(I"&e'Control6 as 5e$ parts
derivam de )icroso*t"$hare#oint"&e'+art+ages"&e'+art. *m$ora a Ae$Part
se,a 4erdada de $%stem"&e'"(I"Control6 ela vai al"m da funcionalidade de um
controle convencional manipulando as intera;es com as classes
&e'+art)anager e &e'+art,one para dar suporte L adi!o6 e#clus!o6
personali/a!o e cone#!o das Ae$ Parts em uma pgina. As classes e
mem$ros das Ae$Parts est!o contidas dentro de
$%stem"&e'"(I"&e'Control"&e'+arts"
2ma grande vantagem de usPlas " <ue elas com$inam a Je#i$ilidade dos
controles personali/ados com a capacidade de gerenciamento de arrastarP
soltar dos controles de usurios. Voc@ pode arrastar Ae$Parts conclu:das das
galerias e soltPlas em /onas. Tam$em " possivel modiKcar as propriedades
compartil4adas de um grupo de Ae$Parts e tornPlas persistentes.
>entro de nossos pro,etos podemos utili/ar Ae$Parts de duas formas.
Atrav"s de controles ASP.%*T NLa$el6 Dutton6 Te#tDo#6 etcO ou atrav"s da
cria!o de classes <ue 4erdem da classe
$%stem"&e'"(I"&e'Controls"&e'+arts"&e'+art"
+s controles Ae$Parts s!o Vteis para desenvolver sites do tipo portal.
-omo os portais geralmente possuem funcionalidades muito semel4antes
entre si6 fa/ sentido criar portais a partir de uma estrutura predeKnida do <ue
criar o site do /ero. A utili/a!o de Ae$Parts neste conte#to fornece uma tima
T@rgetTrust Treinamento & Tecnologia 52
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
capacidade de reutili/a!o de cdigo e de inser!o de novas funcionalidades
com um custo menor de esforo.
A ar<uitetura de Ae$ Parts
Visto <ue a fun!o das Ae$ Parts " se comportar como um meio de
otimi/ar a interface de usurios6 os componentes funcionais foram
desmem$rados em gerenciamento de pgina glo$al e gerenciamento de
/onas. +s controles Ae$Part precisam ser coordenados ,untos. Al"m disso6 as
reas funcionais diferentes de uma pgina fre<uentemente precisam ser
manipuladas como um grupo de controles.
*m termos de classes de estruturas6 as Ae$ Parts s!o anin4adas em
/onas6 <ue s!o gerenciadas por um determinado Ae$PartManager <ue
gerencia todas as /onas de Ae$Part de uma determinada Pgina.
+ Ae$PartManager e as Ae$Bones
-omo pode ser visto na Kgura a$ai#o o &e'+art)anager gerencia cada
&e',one6 <ue conse<uentemente gerencia cada &e'+art individualmente.
Cual<uer pgina <ue <ueira utili/ar uma &e'+art precisa de uma instQncia do
&e'+art)anager. + &e'+art)anager " o responsvel por gerenciar e
coordenar aNsO /onaNsO e os controles inseridos nelaNsO. A &e',one tam$"m
gerencia <ual<uer elemento de interface de usurio <ue acompan4e o grupo
de controles.
%a /ona6 o ,oneTem#late cont"m todas as Ae$ Parts. Se um controle
ASP.%*T convencional estiver em um BoneTemplate6 o ASP.%*T o revestir
como uma Ae$ Part.
T@rgetTrust Treinamento & Tecnologia 53
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
As /onas de Ae$ Parts gerenciam o la?out de um grupo de controles.
Pronto para o uso6 o ASP.%*T inclui <uatro /onas. S!o elasM
'eb#artCone *ssa classe representa a funcionalidade $sica
para gerenciar controles do lado do servidor em /onas de uma
pgina. +s controles de &e'+art,one s!o responsveis em
4ospedar tanto os controles normais do lado do servidor como
tam$"m os controles &e'+art. +s controles normais foram
revestidos pelo controle -eneric&e'+art em tempo de e#ecu!o
para adicionar <ualidades &e'+art a eles.
CatalogCone *ssa /ona 4ospeda os controles Catalog+art. +s
catlogos geralmente gerenciam a visi$ilidades de partes de uma
pgina. + controle Catalog,one mostra e oculta seu conteVdo
$aseado no modo de e#i$i!o selecionado pelo usurio em tempo
de e#ecu!o.
$ditorzone + controle .itor,one representa o meio atrav"s do
<ual os usurios Knais podem modiKcar e personali/ar as paginas da
Ae$ de acordo com suas prefer@ncias. Personali/ar envolve
procedimentos como conKgurar informa;es pessoais6 es<uemas de
cores e la?out. + .itor,one a,uda a gerenciar essa funcionalidade
assim como a salvar e carregar essas conKgura;es para <ue
este,am dispon:veis na pr#ima ve/ <ue o usurio se conectar.
ConnectionCone As Ae$ Parts fre<uentemente s!o mais Vteis
<uando est!o conectadas e se comunicam dinamicamente. +
Connection,one gerencia essa funcionalidade.
T@rgetTrust Treinamento & Tecnologia 54
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
Al"m de incluir vrias /onas predeKnidas o ASP.%*T fornece alguns
controles &e'+art. Alguns s!o para gerenciar catlogos6 en<uanto outros
s!o para gerenciar a edi!o. *is um resumo dos controles Ae$Part
disponi$ili/ados pelo ASP.%*T.
3eclarativeCatalog#art Ao criar uma pagina &e'+art6
podemos adicionar as &e'+arts dinamicamente ou de forma
declarativa. + -ontrole /eclarati!eCatalog+art gerencia os controles
do lado servidor adicionados de forma declarativa a um catlogo em
uma pagina Ae$.
#ageCatalog#art 2ma forma pela <ual os usurios Knais
provavelmente dese,ar!o personali/ar um site " pela a$ertura e
fec4amento de controles. + controle +ageCatalog+art representa um
catalogo de pgina para arma/enar controles <ue foram adicionados
anteriormente a uma pgina <ue agora se encontra fec4ada.
(mortCatalog#art Permite aos usurios importarem uma
descri!o Ae$ Part de dados HML.
"earance$ditor#art X usado para editar as propriedades de
apar@ncia de um controle &e'+art ou -eneric&e'+art associado.
De5avior$ditor#art +ferece suporte a edi!o de
comportamento de um controle &e'+art ou -eneric&e'+art.
La7out$ditor#art Serve para editar as propriedades de la?out
de um controle &e'+art ou -eneric&e'+art.
#roert7Grid$ditor#art +ferece suporte aos usurios na edi!o
de propriedades personali/adas de controles &e'+art.
2tili/ando as Ae$ Parts
Para visuali/armos o funcionamento das 5e$ parts6 vamos reali/ar um
e#erc:cio adicionando 5e$ parts em nossa aplica!o. + o$,etivo do e#erc:cio
ser adicionarmos a pgina default duas colunas de 5e$ parts onde dentro de
cada coluna ir e#istir 4?perlinGs para outros sites. 2tili/ando as 5e$ parts o
usurio poder conKgurar onde ele dese,a <ue cada 4?perlinG se,a
apresentado e se o 4?perlinG deve ser apresentado.
Vamos e#ecutar os seguintes passos em nossa aplica!o.
) [ %a pasta St?les vamos adicionar um ar<uivo css c4amado
Ae$PartsLa?out.css <ue ir conter a conKgura!o de css das >iv <ue
rece$eram as 5e$ parts. + cdigo do ar<uivo css deve Kcar conforme a Kgura
a$ai#o.
T@rgetTrust Treinamento & Tecnologia 55
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
' [ %a pgina >efault.asp# insira um controle Ae$PartManager6 logo
a$ai#o do pargrafo onde est a la$el Rl$lMsgTesteS. *ste Ae$PartManager
ser responsvel por gerenciar todas as Ae$Parts de nossa pgina.
3 [ Insira uma div <ue conten4a outras duas divs dentro dela6 onde cada
div interna da div principal ir fa/er refer@ncia as classes criadas no css. +
cdigo das divs deve Kcar conforme a$ai#o.
0 [ Aps termos conKgurado as divs6 vamos arrastar para dentro de cada
uma das divs internas um Ae$PartBone. >eKna o autoFormat da primeira
Ae$PartBone para Professional e o da segunda para -olorFul.
5 [ >entro da tag BoneTemplate de cada Ae$PartBone vamos inserir
alguns 4?perlinGs. %a primeira adicione dois 4?perlinGs6 um apontando para o
site da Target Trust e o outro apontado para o site da Microsoft. %a segunda
Ae$PartBone adicione mais dois 4?perlinGs6 desta ve/ um apontando para o
site da MS>% e o outro apontando para o site do Asp.%et. + cdigo asp#
resultante do passo 0 e do passo 5 pode ser visuali/ado na Kgura a$ai#o.
T@rgetTrust Treinamento & Tecnologia 56
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
1 [ Agora vamos e#ecutar nossa aplica!o e poderemos ver <ue temos
duas reas onde os 4?perlinGs s!o apresentados e <ue " poss:vel <ue o usurio
minimi/e e fec4e os 4?perlinGs. Fec4e a aplica!o e e#ecutea novamente e
veriK<ue como o site recorda suas a;es na pgina. -aso se,a necessrio
voltar para a iniciali/a!o original do site6 devemos e#ecutar o comando
R%ome>oAe$PartManager.Personali/ation.IesetPersonali/ationStateNO]S dentro
de um $ot!o.
T@rgetTrust Treinamento & Tecnologia 57
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
8 [ + pr#imo passo " implementarmos uma forma em <ue possamos
modiKcar os modos de e#i$i!o de nossas Ae$PartsBones. Para isso vamos
adicionar um pargrafo logo a$ai#o de nosso Ae$PartManager e dentro deste
pargrafo vamos inserir uma la$el e uma >rop>o5nList. A drop ser
responsvel por alterar os modos de e#i$i!o da pgina. + drop deve ser
c4amado de R>rop>o5nList>ispla?ModesS. + cdigo asp# pode ser visuali/ado
na imagem a$ai#o.
As Ae$ parts do ASP.%*T d!o suporte a cinco modos de e#i$i!oM
Dro:!e3i!la7,ode *sse " o modo normal. %!o
disponi$ili/a personali/a!o ou edi!o.
3e!ign3i!la7,ode Ativa a personali/a!o de la?out
arrastar e soltar.
$dit3i!la7,ode Ativa a personali/a!o de propriedades
&e'+art e permite ao usurio e#cluir as Ae$ Parts.
Connect3i!la7,ode Permite conectar as Ae$ Parts em
tempo de e#ecu!o.
Catalog3i!la7,ode Permite adicionar as Ae$ Parts em
uma &e'+art,one em tempo de e#ecu!o.
3 [ Agora vamos atuali/ar o cdigo de nossa pgina >efault.asp#. +
cdigo deve Kcar igual ao cdigo a$ai#o. %o cdigo a seguir " adicionado um
mem$ro &e'+art)anager denominado Z0#)anager L classe para arma/enar a
instancia do &e'+art)anager atual da pgina. X atuali/ado o m"todo
T@rgetTrust Treinamento & Tecnologia 58
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
+ageZInit para ane#ar um manipulador de eventos ao evento InitCom#lete da
pgina. + cdigo e#amina detal4adamente o &e'+art)anager atual em $usca
dos modos de e#i$i!o <ue rece$em suporte e os coloca na /ro#/o0n1ist.
9 [ Agora vamos adicionar um cdigo no evento SelectInde#-4anged do
>rop>o5nList. + cdigo ser responsvel por atuali/ar o modo de e#i$i!o do
Ae$PartManager.
T@rgetTrust Treinamento & Tecnologia 59
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
)( [ + pr#imo passo " su$stituir o m"todo PreIender da pgina6 para
<ue sempre <ue ocorrer uma renderi/a!o o nosso >rop>o5n apresente o
modo de e#i$i!o atual do Ae$PartManager.
)) P *#ecute o site e note <ue agora podemos selecionar o modo /esign.
Posteriormente <uando tivermos mais /onas na pgina iremos ter mais op;es
de sele!o na /ro#/o0n. %ote <ue em modo /esign agora " poss:vel mover
as Ae$ Parts dentro de uma /ona para a outra /ona.
)' [ + pr#imo passo " utili/armos o *ditorBone para editarmos algumas
Ae$Parts. A$ai#o das divs <ue est!o com as 5e$PartsBone vamos adicionar
duas divs6 uma dentro da outra6 com a div interna utili/ando a classe
/i!Coluna&e'+art. >entro da div interna vamos adicionar um *ditorBone. %a
BoneTemplate do *ditorBone vamos adicionar um Appearance*ditorPart. Tanto
o *ditorBone como o Appearance*ditorPart devem ter seus estilos setados
para ProKssional. + resultado desse pedao do asp# pode ser visto na Kgura
a$ai#o.
T@rgetTrust Treinamento & Tecnologia 60
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
Agora vamos e#ecutar nossa aplica!o e voc@ poder ver <ue a op!o
*dit est sendo apresentada em nossa >rop>o5nList. Ao selecionaPl ser
4a$iltiado em cada 5e$ part a op!o de edi!o. Cuando utili/armos a edi!o o
controle *ditorBone e o Appearance*ditorPart ser!o apresentados para
intera!o.
)3P Aps termos utili/ado o *ditorBone6 <ue nos permite editar apar@ncias
de 5e$Parts6 vamos utili/ar agora o -atalogBone <ue ir nos permitir incluir
novas Ae$Parts ou controles asp.net como se fossem Ae$Parts. Logo a$ai#o
do fec4amento das utili/adas com o *ditorBone6 vamos adicionar outras duas
divs6 uma dentro da outra6 com a interna utili/ando a classe
/i!Coluna&e'+art. Agora adicione um -atalogBone dentro da div interna6
dentro da tag BoneTemplate6 do -atalogBone6 insira um controle
>eclarative-atalogPart6 dentro da tag Ae$PartsTemplate vamos inserir o tipo
de controle <ue dese,amos adicionar como Ae$Part.
%este e#erc:cio vamos colocar dentro do Ae$PartsTemplate uma te#tDo#6
vamos adicionar uma propriedade no te#tDo# c4amada Title Nessa propriedade
n!o " do te#tDo#6 mas a engine do -atalogBone ir utili/ar o valor atri$u:do a
essa propriedade como te#to de interface a ser mostrado para os usurios. +
cdigo asp#6 dessa parte6 deve Kcar conforme a imagem a$ai#o.
T@rgetTrust Treinamento & Tecnologia 61
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
Agora vamos e#ecutar a pgina novamente. Alterne para -atalog Mode6
mar<ue a cai#a de sele!o RAdicionar uma Te#tDo#S e adicione um controle
Te#tDo# L /ona linGs. >essa forma podemos ver como " poss:vel adicionar em
tempo de e#ecu!o novos controles Ae$Parts a nossa pgina. A Seguir iremos
criar uma Ae$ Part e iremos utili/ar essa estrutura para <ue possamos inserir
em tempo de e#ecu!o a 5e$ part <ue criamos6 <ue ir permitir <ue o usurio
crie 4?perlinGs dinamicamente em nossa pgina.
-onstruindo Ae$ Parts
+ e#erc:cio <ue reali/amos at" agora nos mostrou como utili/ar Ae$ Parts
em uma pgina e como alternar entre vrios modos do Ae$PartManager em
tempo de e#ecu!o. Vimos como adicionar uma te#tDo# em tempo de
e#ecu!o. Por"m o simples fato de adicionar uma Te#tDo# as Ae$PartBones
n!o representa muita coisa. Agora na continua!o do e#erc:cio6 criaremos uma
Ae$ Part de 4?perlinGs onde o usurio ir personali/ar o destino de sua
navega!o.
-riar uma Ae$ Part " muito simples e $em semel4ante ao
desenvolvimento de controles personali/ados. Para criarmos uma Ae$Part
$ast criar uma classe <ue derive de
S?stem.Ae$.2I.Ae$-ontrols.Ae$Parts.Ae$Part. Aps isso6 teremos a op!o de
processar .TML ou compor uma Ae$ Part partindo de outros controles. A
Ae$Part inclui a funcionalidade de se integrar a ar<uitetura da Ae$ Part.
+ pr#imo passo " implementarmos uma Ae$Part em nossa aplica!o6
dessa forma poderemos ver como " simples implementar uma 5e$ part com
um e#emplo prtico. + e#erc:cio a seguir iremos criar uma Ae$ Part de
4?perlinG <ue adicione L Ae$PartBone linGs pernosali/ados pelo usurio.
*m$ora possamos adicionar um controle .?perlinG convencional ao nosso
catlogo6 os controles normais n!o possuem o suporte para o usurio modiKcar
os linGs6 por isso o linG precisa ser uma Ae$ Part.
Vamos utili/ar os seguintes passos na e#ecu!o desse e#erc:cio.
) [ + primeiro passo " adicionar uma >ll em nossa solu!o e c4amaPl de
Ae$PartLi$. >entro dessa >ll iremos colocar nossa Ae$Part. Vamos adicionar
T@rgetTrust Treinamento & Tecnologia 62
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
uma classe c4amada .?perLinGAe$Part a nossa >ll. *ssa classe ser a nossa
Ae$Part. Aps termos e#ecutado essas a;es nosso Solution *#plorer deve
estar conforme a imagem a$ai#o.
' [ >evemos colocar refer@ncia ao S?stem.Ae$ em nossa >ll. Isso "
necessrio por<ue iremos implementar funcionalidades de interfaces Ae$ em
nossa >ll.
3 [ + pr#imo passo " adicionarmos os using na classe .?perLinGAe$Part
e implementarmos a 4erana das Ae$Parts na classe. + cdigo deve Kcar
conforme a Kgura a$ai#o.
T@rgetTrust Treinamento & Tecnologia 63
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
0 [ A seguir vamos inserir duas variveis privadas6 do tipo string na classe
.?perLinGAe$Part6 uma para representar o nome de e#i$i!o da Ae$ Part e a
outra para representar o 2IL real. Am$a ser!o iniciali/adas com valores
>efaults. Aps inserirmos essas duas variveis vamos inserir outra varivel
privada6 do tipo .?perLinG6 <ue ter como funcionalidade otimi/ar o controle
.?perLinG. Vamos so$reescrever o m"todo -reate-4ild-ontrols para criar uma
instQncia do controle .?perLinG e adicionPlo L cole!o de controles
.?perLinGAe$Part. Vamos iniciali/ar a propriedade Te#t do 4?perlinG com a
varivel privada <ue representa o nome de e#i$i!o e vamos iniciali/ar a
propriedade %avigate2rl com a varivel privada <ue representa o 2IL. +
cdigo inserido deve Kcar conforme a Kgura a$ai#o.
5 [ + pr#imo passo " e#por url e nome de e#i$i!o como propriedades
para <ue a ar<uitetura das 5e$ parts possam tra$al4ar com elas. Para permitir
<ue as propriedades das 5e$ parts possam tra$al4ar com a ar<uitetura das
5e$ parts atrav"s do Propert?7rid*ditorPart6 devemos acrescentar os
seguintes atri$utos as propriedadesM Personali/a$le6 Ae$Dro5sa$le e
Ae$>ispla?%ame. + cdigo deve Kcar conforme a$ai#o.
T@rgetTrust Treinamento & Tecnologia 64
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
Aps o <uinto passo nossa 5e$ part est pronta. Agora devemos compilar
a >ll e adicionar a refer@ncia entre os pro,etos.
Aps termos adicionado a refer@ncia entre os pro,etos note <ue nossa 5e$
part6 .?perLinGAe$Part6 agora aparece no cai#a de ferramentas.
T@rgetTrust Treinamento & Tecnologia 65
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
+ pr#imo passo agora " utili/armos nossa 5e$ part. Para isso vamos em
nossa pgina >efault.asp# e colo<ue nossa -atalogBone em modo R*dit
TemplateS. Vamos arrastar no .?perLinGAe$Part para logo a$ai#o da te#tDo#
<ue inserirmos no e#erc:cio anterior. Adicione tam$"m uma propriedade Title e
colo<ue o valor <ue voc@ dese,a <ue se,a apresentado <uando formos inserir
nossa 5e$ part. + cdigo asp# deve Kcar conforme a$ai#o.
Adicione agora um controle Propert?7rid*ditorPart L *ditorBone da
pgina. *le deve Kcar logo a$ai#o do controle Appearance*ditorPart. + controle
Propert?7rid*ditorPart ir prover a funcionalidade de personali/a!o das
propriedades de nossa 5e$ part.
Agora vamos rodar nossa aplica!o. Selecione o modo -atalog e adicione
nossa 5e$ part para a pgina. Aps isso selecione o modo *dit6 v na nossa
5e$ part selecione *dit nela6 ent!o v no Proper?7rid*ditorPart <ue ir
aparecer no Knal da pgina e modiK<ue os valores do displa? name e da 2IL
de nossa 5e$ part6 para algum site <ue dese,a <ue v a navega!o. -onKrme
a altera!o6 cli<ue em nossa 5e$ part e veriK<ue como agora ns alteramos
suas propriedades de navega!o em tempo de e#ecu!o.
T@rgetTrust Treinamento & Tecnologia 66
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
-om esses e#erc:cios pudemos ver como utili/ar 5e$ parts6 suas /onas e
como " fcil criarmos nossas prprias 5e$ parts. Vimos tam$"m <ue podemos
utili/ar tanto controles normais como 5e$ parts ,unto com a ar<uitetura das
5e$ parts. Ielem$rePse as 5e$ parts s!o especialmente Vteis para aplicativos
do tipo portal por terem a 4a$ilidade de otimi/ar os utilitrios de
personali/a!o do asp.net.
T@rgetTrust Treinamento & Tecnologia 67
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
$9erc8cio!
). Adicione uma terceira coluna nossa aplica!o e insira alguns controles
para tra$al4arem como 5e$ part.
'. -rie uma 5e$ part onde o usurio digite uma categoria e a 5e$ part
apresenta o nome do departamento <ue a categoria pertence Nutili/e nosso
$anco6 DallonS4opO.
T@rgetTrust Treinamento & Tecnologia 68
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
*spao para Anota;es
T@rgetTrust Treinamento & Tecnologia 69
ASP.%*T 3.5 Avanado
5.
5.
LI%C
LI%C
T@rgetTrust Treinamento & Tecnologia 70
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
;b<etivo!
Ao Knal deste cap:tulo voc@ estar apto LM
*ntender o <ue " o Lin<.
Visuali/ar os diferentes tipos de Lin<.
2tili/ar Lin< to +$,ects]
*ntender o Lin< to SCL.
2tili/ar o Lin< to SCL como frame5orG de persist@ncia de
dados.
Implementar uma aplica!o em 3 camadas com o Lin< to
SCL.
T@rgetTrust Treinamento & Tecnologia 71
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
; ?ue @ o L(N)
LI%C NLanguage Integrated Cuer?O " uma funcionalidade6 inclu:da no
frame5orG 3.56 <ue tem como o$,etivo preenc4er a lacuna entre o mundo dos
o$,etos e o mundo dos dados.
Tradicionalmente implementamos consultas a dados a partir de strings6
<ue n!o possuem uma veriKca!o do compilador em runtime e n!o possuem
suporte ao Intellisense6 <ue atuam em con,unto com alguma tecnologia
gerenciadora da fonte de dados. Al"m disso6 " necessrio o con4ecimento de
cada linguagem de consulta <ue atua em con,unto com a fonte de dados6 por
e#emplo6 Danco de dados SCL Server6 Dando de >ados +racle6 ar<uivos HML6
>atasets6 Ae$ Services6 etc. + LI%C se prop;e a ser uma linguagem
intermediria <ue fornea consultas a diferentes tipos de fonte de dados. %a
utili/a!o do LI%C s!o implementadas consultas em cole;es de o$,etos
fortemente tipados utili/ando linguagens e operadores familiares Nsinta#e
muito parecida com consultas SCL de S7D>O.
Iesumidamente podemos deKnir LI%C como uma linguagem de consulta
universal <ue atua em cima de o$,etos.
Todas as consultas Lin< s!o $aseadas nos tipos gen"ricos. %!o " necessrio
um con4ecimento profundo em gen"ricos6 antes de comear a escrever
consultas. %o entanto devemos entender dois conceitos $sicos.
Cuando criamos uma instQncia de uma classe <ue " uma cole!o
gen"rica6 ns su$stitu:mos o RTS com o tipo de o$,etos <ue a lista
conter. Por e#emplo6 uma lista gen"rica de caracteres " e#pressa
como List TstringU e uma lista gen"rica do tipo -ustomer " e#pressa
como List T-ustomerU. Se tentarmos adicionar um o$,eto -ustomer
para uma lista de string iremos o$ter um erro de compila!o. As listas
gen"ricas n!o atuam com o tipo de dados +$,ect e sim com o tipo de
dados informados em sua cria!o. 2ma das grandes vantagens das
cole;es gen"ricas " <ue n!o " necessrio e#ecutar a convers!o de
tipos <uando <ueremos utili/ar seus o$,etos.
I*numera$le TTU " a inteface <ue permite a cole;es gen"ricos
serem enumerados6 permitindo com <ue a cole!o se,a utili/ada em
con,unto com laos Foreac4. Todas as cole;es6 mesmo as n!o
gen"ricas como o Arra?List6 possuem suporte a I*numera$le.
Cuando implementamos uma consulta Lin< sempre e#ecutamos 3 a;es.
IdentiKca!o da fonte de dados Todas as fontes de dados de
consultas Lin< devem implementar ou derivar de I*numera$le ou
I*numera$leTTU ou uma interface derivada6 como ICuer?a$le TTU.
Se os dados de origem n!o forem de um tipo pass:vel de consulta
ent!o o provedor LI%C deve representPlo como tal. Por e#emplo6
LI%C to HML carrega um documento HML em um elemento H*lement
<ue atua em con,unto com o LI%C. *nt!o6 caso dese,emos utili/ar
uma fonte de dados <ue n!o se,a compat:vel com Lin< devemos
implementar uma camada intermediria <ue suporte uma interface
gen"rica6 para <ue possamos utili/ar LI%C.
T@rgetTrust Treinamento & Tecnologia 72
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
-onsulta A consulta especiKca <uais informa;es devem ser
recuperadas a partir de uma fonte de dados. A consulta pode
tam$em especiKcar como as informa;es s!o classiKcadas6
agrupadas e Kltradas. Ao decorrer deste cap:tulo iremos reali/ar um
estudo detal4ando so$re as consultas.
*#ecu!o da consulta Cuando geramos a consulta apenas a
arma/enamos na varivel de consulta. A e#ecu!o real da consulta "
adiada at" <ue reali/emos a intera!o com a consulta. Para isso
temos dois tipos de e#ecu!oM *#ecu!o retardada e *#ecu!o
imediata.
o *#ecu!o retardada ocorre <uando e#ecutamos a consulta a
partir da varivel de consulta de um comando foreac4.
o *#ecu!o imediata ocorre <uando utili/amos o comando
ToListTTSourceU ou ToArra?TTSourceU na prpria cria!o da
consulta ou <uando utili/amos os comandos -ount6 Ma#6
Average e First em con,unto com a varivel de consulta.
At" o momento , ocorreram diversas implementa;es de LI%C6 entre as
muitas implementa;es podemos citarM
Lin< To Hml Implementa!o do LI%C <ue atua diretamente so$re
dados HML.
Lin< to +$,ects Atua so$re cole;es de o$,etos.
Lin< to >ataset Ieali/a consulta so$re datasets.
Lin< to FlicGr Permite <ue reali/e consultas so$re fotos e arma/eneP
as no 5e$ site FlicGr.
Lin< to SCL Implementa!o espec:Kca para intera;es do LI%C com
o $anco de dados SCL Server Niremos estudar esta implementa!o
ainda neste cap:tuloO.
Lin< to *ntit? N*ntit? Frame5orGO Tra$al4a com entidades
relacionais de diversos $ancos de dados.
*m fun!o da ar<uitetura do Lin< ser e#tremamente dinQmica sempre
estaremos vendo novas implementa;es tanto por parte da Microsoft NLin< to
+$,ects6 Lin< to HML6 *ntit? Frame5orGO como por parte de terceiros NLin< to
FlicGrO.
+ pr#imo passo6 para <ue possamos entender a teoria do <ue foi dito at"
agora " reali/armos e#emplos prticos. Vamos estudar Lin< to +$,ects e Lin< to
SCL na se<u@ncia desse cap:tulo.
T@rgetTrust Treinamento & Tecnologia 73
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
L(N) %; ;D/$C%S
A deKni!o de Lin< to +$,ects referePse a utili/ar consultas Lin< com
<ual<uer cole!o de o$,etos <ue utili/am I*numera$le ou I*numera$leTTU6
sem usar <ual<uer provedor de Lin< como intermedirio6 como o Lin< to SCL
ou Lin< to HML.
Podemos utili/ar consultas Lin< diretamente so$re cole;es como
ListTTU6 Arra?6 >ictionar? of TT`e?6 TValueU e <ual<uer outra forma de
cole!o <ue utili/e I*numera$le.
>e certa forma Lin< to +$,ects representa uma nova forma de a$ordagem
so$re os dados de cole;es. %a forma antiga era necessrio implementar
algoritmos comple#os para reali/armos $uscas dentro da cole!o. E com o
Lin< to o$,ects $asta escrevemos uma consulta Lin< para reali/ar uma $usca6
proporcionando um gan4o tremendo em produtividade de cdigo.
Al"m disso6 podemos citar outras vantagens da utili/a!o de Lin< to
+$,ects comoM
2ma maior legi$ilidade do cdigo]
Filtragem eKciente6 $em como ordena!o e agrupamento de dados
com um m:nimo de cdigo implementado]
7rande porta$ilidade para outras fontes de dados com pouca ou
nen4uma modiKca!o.
Iesumidamente <uanto mais comple#a a opera!o e#ecutada nos dados6
maior ser a percep!o de $enef:cios ao utili/ar Lin< to +$,ect.
Agora vamos implementar em nossa aplica!o uma pgina <ue utili/e
Lin< to +$,ects como um e#erc:cio para <ue possamos ter uma $oa
compreens!o de como funciona o Lin< to +$,ects. + o$,etivo do e#erc:cio "
implementar um arra? K#o dentro da pgina. %a pgina teremos dois $ot;es.
2m $ot!o responsvel por apresentar todos os itens do arra? e o outro $ot!o
ir apresentar os valores do arra? ordenados em ordem crescente e <ue se,am
maiores <ue um determinado valor. Para implementarmos esse e#erc:cio
vamos seguir os passos a$ai#os.
) [ + primeiro passo " criarmos uma pasta c4amada RLin<S dentro da
solution e#plorer de nossa aplica!o6 dentro desta pasta iremos inserir todas
as pginas <ue iremos utili/ar nos e#erc:cios referentes a Lin<.
Aps termos inserido a pasta vamos inserir dentro da pasta uma pgina
asp# c4amada RfrmLin<To+$,ects.asp#S. *sta pgina ser a pgina <ue iremos
implementar esse e#erc:cio.
T@rgetTrust Treinamento & Tecnologia 74
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
A solution e#plorer deve Kcar conforme a imagem a$ai#o.
' [ Agora vamos inserir um item no menu de nossa aplica!o6 <ue Kca na
main.master6 <ue leve o usurio a pgina <ue aca$amos de criar.
3 [ Vamos criar a interface de nossa pgina. >evemos inserir dois $ot;es
e uma te#tDo#. + cdigo asp# da pgina deve Kcar conforme a Kgura a$ai#o.
0 [ Agora o pr#imo passo " inserir a primeira parte do cdigo em nossa
pgina.
T@rgetTrust Treinamento & Tecnologia 75
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
Inserir refer@ncia a S?stem.Te#t
>eclarar um arra? de int6 c4amado %Vmeros6 com um taman4o de 5
posi;es e iniciali/e o arra? com os valores 96 9(6 )6 '3 e )1. + arra?
deve ser protected e deve ser vis:vel em <ual<uer fun!o de nossa
pgina.
+ resultado desse primeiro cdigo deve Kcar conforme a imagem a$ai#o.
5 [ + pr#imo passo " adicionarmos cdigo ao evento clicG do $ot!o
$tnSelecionar. + cdigo <ue devemos inserir pode ser visto na Kgura a$ai#o.
Vamos analisar o cdigo <ue foi inserido.
%a primeira parte do cdigo podemos ver a consulta Lin<. %ote <ue a
estrutura da consulta Lin< " parecida com uma consulta SCL6 a diferena " <ue
a se!o select Kca no Knal da consulta.
T@rgetTrust Treinamento & Tecnologia 76
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
A palavra var signiKca <ue o compilador ir deKnir <ual tipo de dados ter
a varivel. *m nossa consulta todos%umeros <ue " var o compilador ir
repassar para essa varivel um listTintU6 visto <ue a fonte de dados
N%VmerosO " um arra? de inteiros.
%a consulta Lin< atri$u:mos %Vmeros para n e selecionamos todos os
registros de n. >essa forma retornando todos os registros do arra?. A se!o
from identiKca as fontes de dados de nossa consulta e a se!o select identiKca
o retorno da consulta.
A consulta <ue reali/amos indica <ue selecionamos todos os conteVdo do
arra? nVmeros e o retorno " todo o conteVdo do arra? na ordem em <ue est.
Aps a consulta utili/amos um foreac4 para percorrer todos os registros e
inserimos dentro de uma string $uilder para ser inserida6 ao Knal do loop6
dentro da te#t$o# de resultado.
5 [ + pr#imo passo de nosso e#erc:cio " adicionarmos cdigo ao evento
clicG do $ot!o $tnSeleconar+rdenado. + cdigo <ue deve ser inserido pode ser
visto na Kgura a$ai#o.
Podemos ver <ue o cdigo " praticamente igual ao cdigo <ue est no
outro $ot!o6 possuindo como diferena a consulta Lin<. Podemos ver <ue nesta
segunda consulta estamos utili/ando duas se;es <ue n!o foram utili/adas na
outra consultaM 54ere e order$?.
%a se!o 54ere " colocada todas as restri;es e Kltragens de nossas
consultas. %a consulta <ue aca$amos de implementar estamos restrigindo <ue
o valor de n deve ser maior <ue '(. >essa forma a consulta ir retornar todos
os valores do arra? R%VmerosS <ue se,am maior <ue '(.
A se!o order$? " responsvel por ordernar o resultado de nossa consulta.
%o e#erc:cio estamos ordernando o resultado de forma ascendente Ndo menor
para o maiorO.
T@rgetTrust Treinamento & Tecnologia 77
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
Aps termos inseridos esses cdigos6 vamos salvar nossa aplica!o e
rodar o sistema. Poderemos ver <ue <uando clicamos no primeiro $ot!o "
apresentado todo o conteVdo do arra? %Vmeros na te#t$o# de resultado6 no
formato original de seus dados e <uando clicamos no segundo $ot!o
Nselecionar todos os itens ordenadosO s!o apresentados ordenadamente
somente os registros do arra? <ue se,am maiores <ue '(.
+ resultado de nosso e#erc:cio pode ser visto na Kgura a$ai#o.
-om esse e#erc:cio podemos visuali/ar a utili/a!o do Lin< to +$,ects
tra$al4ando com um arra? K#o de uma pgina. Mas da mesma forma <ue
tra$al4amos com o arra? K#o podemos tra$al4ar com <ual<uer outra forma de
cole!o de dados <ue implemente a interface I*numera$le e suas varia;es.
T@rgetTrust Treinamento & Tecnologia 78
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
L(N) to S)L
LI%C to SCL " uma implementa!o do LI%C <ue atua em con,unto com o
SCL Server <ue tem como o$,etivo converter consultas escritas em -d para
SCL dinQmico6 atuando como um frame5orG de persist@ncia de dados6
reali/ando o mapeamento das ta$elas do $anco de dados em classes. A partir
dessas classes podemos reali/ar opera;es -I2> no $anco de dados.
*m virtude de os fa$ricantes de $anco de dados n!o adotarem o padr!o
A%SI o Lin< to SCL atua somente com $anco de dados SCL Server. 2ma
implementa!o <ue tem a mesma funcionalidade do LI%C to SCL <ue " o
*ntit? Frame5orG atua com multi $ancos.
A primeira vista podemos pensar <ue " apenas mais uma linguagem <ue
devemos aprender e <ue as opera;es de -I2> com $anco de dados ,
reali/amos com o A>+.%*T6 mas ao analisarmos o cenrio atual de uma forma
mais criteriosa podemos entender o motivo do LI%C to SCL de e#istir.
-omo fa/emos para acessar um $anco de dados relacional utili/ando
A>+.%*T mantendo o conceito de orienta!o a o$,etos= 7eralmente efetuamos
a representa!o das ta$elas em classes em forma <ue possamos criar uma
camada responsvel pelo $anco de dados.
Ieali/amos isso $asicamente de duas formasM
). Ieali/ando o mapeamento o$,etoPrelacional em classes de negcio
e acessando os dados utili/ando >ataIeader.
'. Ieali/ando o mapeamento o$,etoPrelacional usando >ataSets e o
acesso de dados atrav"s de >ataAdapters ou Ta$leAdapters.
+ o$,etivo do LI%C to SCL " reunir o mel4or das duas op;es de forma
<ue voc@ possa fa/er o mapeamento o$,etoPrelacional criando classes <ue
representam as ta$elas do $anco de dados Ninclusive mapeando stored
procedures como m"todosO e com isso possi$ilitando a cria!o de consultas e
altera;es no $anco de dados usando a sinta#e LI%C.
Internamente o LI%C to SCL utili/a A>+.%*T para reali/ar acessos ao
$anco de dados e opera;es -I2>.
*ntendendo o >ata-onte#t
+ LI%C to SCL possui a classe >ata-onte#t. + >ata-onte#t atua como um
elo de liga!o entre o $anco de dados SCL Server e as classes das entidades
LI%C to SCL mapeadas do $anco. + >ata-onte#t cont"m as informa;es e os
m"todos para efetuar a cone#!o com o $anco e a manipula!o de dados.
T@rgetTrust Treinamento & Tecnologia 79
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
+ >ata-onte#t possui diversos m"todos <ue podemos utili/ar6 como o
m"todo Su$mit-4anges <ue envia as atuali/a;es das classes LI%C to SCL
para o $anco de dados. Al"m disso6 " permitido criar m"todos dentro do
>ata-onte#t para mapear stored procedures e fun;es de forma <ue
e#ecutando os m"todos criados as stored procedures e as fun;es <ue foram
mapeadas pela classe >ata-onte#t ser!o e#ecutadas.
+ >ata-onte#t tra$al4a em con,unto com o >escritor de +$,eto Ielacional
N+$,ect Ielational >esigner [ +&I >esignerO. + >escritor de +$,eto Ielacional
fornece uma interface visual para criar e editar -lasses LI%C to SCL.
2tili/ando o >escritor de +$,eto Ielacional podemos inserir6 alterar e
e#cluir classes e gerenciar m"todos e propriedades. Todas as a;es efetuadas
pelo >escritor de +$,eto Ielacional pode ser feita gerenciando o cdigo do
>ata-onte#t6 mas os gan4os em tempo <ue o +&I >esigner nos fornece aca$a
fa/endo com <ue ele se,a utili/ado massivamente em pro,etos <ue utili/em
LI%C to SCL.
Aps termos visto estas teorias vamos implementar a utli/a!o de LI%C to
SCL em nossa aplica!o para <ue possamos ver na prtica a utili/a!o de LI%C
to SCL ,unto com o >ata-onte#t e o +&I >esigner para acessar o $anco de
dados e gerar algumas consultas so$re os dados do $anco.
2tili/ando LI%C to SCL em nossa aplica!o
Agora vamos adicionar em nossa aplica!o a utili/a!o do LI%C to SCL em
uma pgina <ue ter a funcionalidade de apresentar todas as categorias de
livros <ue o $anco possui e <uando selecionarmos uma categoria
automaticamente a pgina ir apresentar para o usurio um grid com todos os
livros pertencentes L categoria selecionada.
Vamos seguir os seguintes passos para e#ecutar esse e#erc:cio.
)P Adicione uma pasta c4amada >ata em nossa aplica!o6 dentro desta
pasta iremos adicionar o >ata-onte#t responsvel por gerenciar a liga!o de
nossa aplica!o com o $anco de dados.
' [ -onKgure uma cone#!o com o $anco de dados a partir do
>ata$ase*#plorer.
3 [ Adicione dentro da pasta >ata um >ata-onte#t6 para adicionar um
>ata-onte#t devemos selecionar um LI%C to SCL -lasses <ue est dentro do
Template >ata na tela de Inserir novo item. Vamos c4amar o >ata-onte#t de
Dallon.d$ml Ntodo o >ata-onte#t possui a e#tens!o d$mlO. A Kgura a$ai#o
apresenta como devemos inserir um >ata-onte#t.
T@rgetTrust Treinamento & Tecnologia 80
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
Aps termos adicionado o item o >escritor de +$,eto Ielacional N+&I
>esignerO ser apresentado e o ar<uivo LI%C to SCL Dallon.d$ml va/io ser
inserido dentro da pasta >ata.
A interface va/ia corresponde ao >ata-onte#t <ue est pronto para ser
conKgurado.
+ +&I >esigner apresenta dois paneis. + primeiro e#i$e as classes de
entidades e o segundo e#i$e os m"todos do >ata-onte#t. A Kgura a$ai#o
apresenta o >ata-onte#t va/io.
T@rgetTrust Treinamento & Tecnologia 81
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
0 [ + pr#imo passo " criarmos as classes LI%C to SCL <ue ser!o
mapeadas para as ta$elas do $anco de dados. Para criarmos as classes $asta
arrastar6 a partir do >ata$ase *#plorer6 as ta$elas <ue <ueremos utili/ar no
>ata-onte#t. Cuando arrastamos a ta$ela6 automaticamente " criada a classe
de entidade <ue mapeia a ta$ela do $anco de dados.
Vamo seguir os seguintes procedimentos para criar as entidades <ue
utili/aremos neste e#erc:cio.
A$ra o >ata$ase *#plorer6 locali/e a cone#!o com o $anco de dados
DallonS4op e e#panda o o$,eto Ta$les.
Arraste as ta$elas -ategor?6 Product-ategor? e Product para o +&I
>esigner e salve o >ata-onte#t.
Aps termos adicionado as ta$elas o nosso conte#to deve estar conforme
a imagem a$ai#o.
T@rgetTrust Treinamento & Tecnologia 82
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
5 [ Aps termos preparado nosso >ata -onte#t estamos pronto para
utili/ar as classes geradas pelo conte#to em nossa aplica!o. Para isso vamos
adicionar uma classe c4amada -ategorias dentro da pasta >ata e vamos criar
o m"todo get-ategorias. + cdigo do m"todo pode ser visto a$ai#o.
Ao analisarmos o m"todo perce$emos <ue o retorno do m"todo " um
I*numera$leT-ategor?U6 como vimos antes todo o$,eto <ue implementa a
T@rgetTrust Treinamento & Tecnologia 83
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
interface I*numera$le " um resultado Lin<6 ent!o podemos retornar a prpria
interface gen"rica.
Cuando criamos a varivel d$ do tipo Daloon>ata-onte#t estamos criando
uma vis!o do nosso conte#to de dados6 ent!o ao utili/armos a varivel d$
iremos ter acesso as classes e m"todos pertencentes ao >ata-onte#t.
* o retorno " uma consulta LI%C <ue usa como fonte de dados o o$,eto
-ategories <ue pertence ao >ata-onte#t. + o$,eto -ategories fa/ o
mapeamento da ta$ela -ategor? do $anco de dados.
1 [ + pr#imo passo " criarmos a interface desse e#erc:cio. Adicione uma
pgina dentro da past Lin< c4amada frm-ategor?Products. >entro da pgina
adicione uma la$el com o te#t e R-ategoriaMS e uma >rop>o5nList c4amada
Rddl-ategoriasS
+ cdigo asp# da pgina deve Kcar conforme a imagem a$ai#o.
8 [ %a se<u@ncia vamos criar um data source para a >rop>o5nList6 o data
source deve ser do tipo o$,ect e deve selecionar na op!o select o m"todo
get-ategorias <ue ns criamos na classe -ategorias. Para <ue o m"todo
aparea como uma op!o de sele!o devemos compilar nossa aplica!o.
3 [ + pr#imo passo " criarmos uma classe c4amada Produtos6 dentro da
pasta Lin<. %esta classe iremos inserir o m"todo responsvel por $uscar os
produtos vinculados com uma determinada categoria. Vamos adicionar esse
m"todo6 o nome dele deve ser RgetProdutosPor-ategoriaS e o cdigo do
m"todo pode ser visto na Kgura a$ai#o.
T@rgetTrust Treinamento & Tecnologia 84
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
Ao analisarmos o cdigo podemos visuali/ar a utili/a!o do ,oin6 do A4ere
e do order$?.
A se!o ,oin fa/ a uni!o entre o$,etos a partir de campos c4aves6 no nosso
m"todo estamos ,untando o o$,eto Products com o o$,eto Product-ategories
<uando os campos ProductI> de cada o$,eto se,am iguais.
A se!o 54ere Kltra os dados a partir de uma e#press!o6 em nosso
e#erc:cio estamos Kltrando o o$,eto -ategories onde o -ategor?I> se,a igual ao
idcategoria informado na c4amada do nosso m"todo.
A se!o order$? orderna os dados da consulta6 no nosso caso estamos
ordenando a consulta pelo campo ProductI>.
9 [ + pr#imo passo " adicionar um gridvie5 a nossa pgina6 vamos
c4amar o gridvie5 de grdLivros e vamos atri$uir algum formato ao autoformat
do grid.
)( [ Vamos adicionar um >ata Source ao nosso grid. + data source deve
utili/ar o$,etos como fonte de dados e no select do datasource vamos
selecionar o m"todo getProdutosPor-ategoria <ue aca$amos de criar. +
>ataSource ir nos perguntar <ual fonte ele deve utili/ar para passar como
parQmetro para o m"todo. Mar<ue <ue a fonte deve ser um control6 selecione
nossa >rop>o5nList e a propriedade deve ser o selectvalue Nessa propriedade
deve ser apresentada como defaultO.
)) [ Mar<ue a propriedade autopost$acG para true da dropdo5nlist e vamos
adicionar o seguinte cdigo no evento SelectedInde#-4anged da dropdo5nlist.
T@rgetTrust Treinamento & Tecnologia 85
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
)' [ -rie uma op!o no menu para acessar a pgina.
Vamos rodar nossa aplica!o e note <ue sempre <ue selecionarmos uma
categoria os itens do gridvie5 ir!o mudar6 apresentando somente os livros
vinculados L categoria. >essa forma utili/amos LI%C to SCL para acessar nosso
$anco de dados e apresentar para o usurio.
Podemos ver tam$"m a utili/a!o de consultas LI%C e como podemos
fa/er para utili/ar consultas integradas. + resultado do e#erc:cio pode ser visto
a$ai#o.
T@rgetTrust Treinamento & Tecnologia 86
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
Utilizando L(N) to S)L em E camada!
X comum termos dVvidas referentes a utili/a!o de 3 camadas. Mas aKnal
o <ue " uma aplica!o em 3 camadas= Cual o gan4o <ue um pro,eto tem ao
ser implementado em camadas=
+ padr!o de 3 camadas comeou a ser utili/ado a partir da necessidade
de adicionar funcionalidades de negocio6 $anco de dados ou interface em um
sistema com o menor impacto possivel nas outras funcionalidades <ue o
sistema possui.
Cuando implamentamos uma ar<uitetura em 3 camadas ns separamos
as funcionalidades da seguinte maneiraM
). -amada de Interface do 2surio Nuser interfaceO [ 2I [ Toda e
<ual<uer lgica de interface com o usurio Numa pgina 5e$6 um
relatrio6 uma aplica!o m$ile6 etcO " classiKcada dentro da
camada de interface.
'. -amada de negcio NDussiness Logic La?erO [ DLL [ responsvel por
arma/enar a lgica da aplica!o.
3. -amada de acesso a dados N>ata Acess La?erO [ >AL [ camada
responsvel pelo acesso e persist@ncia dos dados no $anco de
dados da aplica!o.
Imagine <ue precisamos trocar o $anco de dados de nossa aplica!o e os
comandos SCL n!o s!o compat:veis. *m um sistema <ue n!o utili/a 3 camadas
poderemos ter impacto dessa altera!o em <ual<uer parte do sistema. E em
um sistema 3 camadas o impacto ocorrer apenas na camada de dados N>ALO6
facilitando e muito essa implementa!o.
Cuando montamos nossa aplica!o devemos sempre montar de uma
forma <ue a comunica!o entre as camadas se,a feita de forma correta.
A camada de dados N>ALO se comunica apenas com a camada
de negcios NDLLO]
A camada de negcios NDLLO se comunica com a camada de
dados N>ALO e com a camada de interface do usurio N2IO]
A camada de interface do usurio N2IO se comunica apenas
com a camada de negcio NDLLO.
*ssas restri;es s!o necessrias para aumentar a segurana de nossa
aplica!o. Imagine a seguinte situa!o6 um 4acGer consegue invadir o site N<ue
" nossa 2I mesmo ele tendo acesso aos cdigos da 2I ele n!o ter nen4um
T@rgetTrust Treinamento & Tecnologia 87
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
con4ecimento de nosso $anco6 o m#imo <ue ele conseguir visuali/ar " a
c4amada de m"todos de nossa camada de negcio.
+ LI%C to SCL entra perfeitamente na implementa!o da >AL6 criando
mais uma a$stra!o at" o $anco de dados e gerenciando todo o acesso e a
persist@ncia dos dados ,unto com o $anco.
Agora vamos passar da teoria para a prtica preparando nossa aplica!o
para tra$al4ar em 3 camadas e implementando um formulrio de cadastro de
produtos em 3 camadas e utili/ando LI%C to SCL como o responsvel pela
camada de dados.
Vamos seguir os seguintes passos para e#ecutar essa implementa!o
) [ Adicione uma nova -lass Li$ra? em nossa aplica!o c4amada
>ALZDalloon6 dentro desta >LL iremos implementar a camada de dados.
' [ Adicione uma nova -lass Li$rar? em nossa aplica!o c4amada
DLLZDalloon6 dentro desta >LL iremos implementar a camada de negcio.
3 [ + pr#imo passo " montar as refer@ncias entre os pro,etos. %o nosso
site vamos adicionar refer@ncia a dll DLLZDalloon e na dll DLLZDalloon vamos
adicionar refer@ncia a dll >ALZDalloon.
0 [ >evemos inserir refer@ncia ao S?stem.>ata.Lin< nos pro,etos
DLLZDalloon e >ALZDalloon.
5 [ Aps termos reali/ados as conKgura;es iniciais vamos montar a
nossa camada de dados. -rie um >ata-onte#t na >ALZDalloon6 c4amado de
Rd$Z>AL.d$mlS e adicione todas as ta$elas do $anco Dalloon ao >ata-onte#t
fa/endo com <ue o conte#to faa o mapeamento de todo o $anco de dados. +
>ata-onte#t deve Kcar conforme a imagem a$ai#o.
T@rgetTrust Treinamento & Tecnologia 88
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
Aps termos atuali/ado o >ata-onte#t aca$amos de terminar toda a
camada de dados de nossa aplica!o. %ote como a utili/a!o do LI%C to SCL
facilita6 e muito6 a integra!o com $anco de dados. Se fosse utili/ado A>+.%*T
ter:amos <ue fa/er uma classe para cada ta$ela6 dever:amos criar m"todos de
inclus!o6 altera!o e dele!o dos dados6 propriedades6 consultas6 etc.
A utili/a!o do LI%C to SCL agrega produtividade no desenvolvimento de
aplica;es.
1 [ + pr#imo passo " iniciar a constru!o da camada de negcio6 para
isso vamos adicionar na >ll DLLZDalloon uma classe de negocio c4amada
RProdutosS.
8 [ Insira dentro da classe produtos um using para a >ll da camada de
dados6 >ALZDalloon6 e insira as seguinte propriedades.
ProductI> [ int]
%ame [ String]
>escription [ String]
T@rgetTrust Treinamento & Tecnologia 89
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
Price [ decimal]
+n-atalogPromotion [$ool]
+n>epartmentPromotion [ $ool]
A classe produtos deve Kcar conforme a imagem a$ai#o aps inserirmos
as propriedades.
3 [ %a se<u@ncia vamos criar um m"todo <ue retorne todos os produtos
do $anco de dados com uma lista da classe produtos6 da camada de negcio.
*sse m"todo ir fornecer a fonte de dados para a camada de interface utili/ar
no preenc4imento de grids6 <ue apresentem os produtos cadastrados. +
cdigo do m"todo est apresentado na imagem a$ai#o.
T@rgetTrust Treinamento & Tecnologia 90
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
9 [ Aps ter criado o m"todo compile a DLL.
)( [ + pr#imo passo " ir at" o 5e$ site e criar uma pgina 5e$ <ue ir
servir como um cadastro de produtos. Insira uma 5e$ page dentro da pasta
Lin< c4amada cadProduto.asp# e crie uma op!o no menu 4a$ilitando a
navega!o at" essa pgina.
)) [ %a se<u@ncia insira um 7ridVie5 na pgina cadProduto6 c4ame o grid
de gridPes<uisa6 vincule ele a um >ata Source. + >ataSource deve usar
o$,etos como fonte de dados e deve usar o m"todo getProdutos6 <ue ns
criamos na -lasse produtos da DLL como m"todo responsvel pelo Select.
Aps vincular o grid com o >ataSource 4a$ilite pagina!o e sele!o no
7ridVie5. -onKgure tam$"m a propriedade >ata`e?%ames com a c4ave
RProductI>S Na c4ave primria da ta$ela de produtos.
)' [ Aps termos inserido o grid vamos programar os m"todos para
disparar o >ataDind do gridvie5. + cdigo deve ser inserido conforme a$ai#o.
T@rgetTrust Treinamento & Tecnologia 91
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
)3 [ + pr#imo passo " montarmos os campos da interface6 para
podermos inserir e alterar registros na tela de cadastro de produtos. Acima do
gridVie5 insira uma Tag T.'U e colo<ue um nome para a tela. A$ai#o da tag
T.'U insira uma ta$ela de 0 lin4as com 0 colunas. Insira uma la$el indicando
o campo da tela e um controle referente ao campo da ta$ela de produto.
2tili/a La$el para o productI>6 c4ecG$o# para os dois campos $ool e te#tDo#
para os outros controles. Insira tam$"m dois $ot;es6 um $ot!o de novo e outro
$ot!o de salvar. + cdigo asp# deve Kcar conforme a imagem a$ai#o.
)0 [ Agora vamos comear a programar nossa interface para <ue ela atue
em con,unto com a camada de negcio. Lem$rePse <ue a programa!o na
camada de interface pode ter visi$ilidade somente em dados de interface e
pode evocar funcionalidades da camada de negocio. %unca a camada de
dados pode ser usada na interface. + primeiro passo " inserirmos cdigo no
$ot!o novo. -li<ue duas ve/es no $ot!o novo e adicione o cdigo a$ai#o.
T@rgetTrust Treinamento & Tecnologia 92
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
+ m"todo do $ot!o novo limpa todos os campos e marca o productI> com
R(S N/eroO. 2tili/aremos essa informa!o na implementa!o de nossa lgica6
dentro da interface.
)5 [ Agora vamos comear a gerar os m"todos de -I2> dentro da nossa
camada de negcio. + primeiro m"todo <ue vamos criar ser o Inserir <ue
deve ser criado dentro da classe Produtos da nossa DLL. -rie o m"todo
conforme a imagem a$ai#o.
Ao analisarmos o cdigo do m"todo Inserir6 podemos ver <ue em um
primeiro momento a$rimos uma cone#!o com o $anco de dados6 atrav"s de
um >ata-onte#t da nossa camada de dados. A partir desse >ata-onte#t
iremos mandar informa;es para o $anco de dados. >epois geramos um o$,eto
referente a classe <ue <ueremos inserir o registro e preenc4emos as
propriedades do o$,eto >AL com o valor das propriedades de nosso o$,eto de
negcio.
T@rgetTrust Treinamento & Tecnologia 93
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
%a se<u@ncia inserimos nosso o$,eto criado em um Kla de inser!o a
partir do m"todo Insert+nSu$mit do >ata-onte#t. * a Vltima a!o mandamos
o >ata-onte#t atuali/ar o $anco de dados com todos os registros <ue estavam
em suas Klas6 a partir do m"todo Su$mit-4anges.
)1 [ Agora vamos na nossa pgina6 d@ dois cli<ues no $ot!o salvar e insira
o cdigo a$ai#o6 <ue ir c4amar o m"todo de inser!o da nossa camada de
negcio.
%o cdigo do $ot!o " veriKcado se o valor da la$el l$lProductI> " /ero. Se
for /ero ent!o " um registro para ser inserido6 sen!o ir ser um registro para
ser alterado Na c4amada do m"todo AlterarIegistro ser criada posteriormente
nesse e#erc:cioO. Ao c4amarmos o m"todo inserir registro6 criamos um o$,eto
de negcio6 preenc4emos as propriedades dele com os valores de nossosa
controles de tela e c4amamos o m"todo inserir de nossa camada de negocio.
)8 [ Aps os m"todos de inclus!o terem sido criados vamos criar um
m"todo na classe de negcio responsvel pela altera!o de registros. + cdigo
do m"todo pode ser visto a$ai#o.
T@rgetTrust Treinamento & Tecnologia 94
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
)3 [ *m se<u@ncia6 vamos criar um m"todo Find+ne em nosso o$,eto de
negcio6 esse m"todo ser responsvel por pes<uisar um registro na camada
de n"gocio e preenc4er as propriedades da camada de dados com o retorno da
camada de negcio. + cdigo do $ai#o est na imagem a$ai#o.
)9 [ + pr#imo passo " inserirmos um tratamento no evento
SelectedInde#-4anged do 7ridVie5. *sse evento ser responsvel por c4amar
os m"todos de sele!o da DLL e preenc4er os controles de nossa interface com
as propriedades do o$,eto de negcio. Visuali/e o cdigo do $ai#o a$ai#o.
T@rgetTrust Treinamento & Tecnologia 95
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
'( [ Agora <ue , consultamos registros salvos e preenc4emos os
controles de interface com o valor das propriedades do registro6 devemos criar
um m"tdo na interface <ue c4ame o m"todo de altera!o da camada de
negcio. Vamos criar o m"todo a$ai#o em nossa interface.
Aps ter implementado o m"todo alterar registro6 v ao m"todo do $ot!o
salvar6 criado anteriormente6 e adicione no else a c4amada para o m"todo
AlterarIegistro.
Finalmente6 terminamos de implementar nosso cadastro de produtos.
Iode o sistema6 navegue at" a pgina de cadastro de produtos6 navegue entre
os registros <ue s!o apresentados no grid6 altere alguns registros e insira
registros novos.
-om esse e#erc:cio implementamos todo os conceitos das 3 camadas em
nossa aplica!o e dei#amos a carga do LI%C to SCL toda a integra!o e
gerenciamento da $ase de dados6 gerando assim uma a$stra!o a mais na
camada de dados.
T@rgetTrust Treinamento & Tecnologia 96
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
X importante salientar <ue estudamos os m"todos de -I2> do LI%C to
SCL6 onde visuali/amos <ue o LI%C to SCL n!o reali/a somente consultas ao
$anco de dados.
%o e#erc:cio n!o implementamos o $ot!o e#cluir6 mas caso <ueira
implementar o $ot!o o cdigo de e#cluir <ue Kca na DLL pode ser visto na
imagem a$ai#o e o cdigo do $ot!o e#cluir voc@ pode se $asear no cdigo de
altera!o para gerar a implementa!o.
T@rgetTrust Treinamento & Tecnologia 97
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
$9erc8cio!
) [ 7ere um arra? de 5( numeros e implemente Kltros de pes<uisa com o
LI%C to +$,ect tra$al4ando em con,unto com controles de tela.
' [ Implemente um cadastro da ta$ela >epartment utili/ando os conceitos
de 3 camadas com o LI%C to SCL.
3 [ -olo<ue no cadastro de >epartmentos um gridvie5 <ue apresente
todas as categorias <ue est!o vinculadas com o >epartamentos.
T@rgetTrust Treinamento & Tecnologia 98
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
*spao para Anota;es
T@rgetTrust Treinamento & Tecnologia 99
ASP.%*T 3.5 Avanado
1.
1.
Manuten!o de *stado
Manuten!o de *stado
T@rgetTrust Treinamento & Tecnologia 100
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
2ma das caracter:sticas das aplica;es 5e$ " <ue elas n!o mantem seu
estado. Para <ue elas manten4am informa;es utili/amos algumas t"cnicas
entre suas re<uisi;es. + IIS por sua ve/ incorpora um cooGie com um
identiKcador Vnico no ca$eal4o de cada re<uisi!o 4ttp6 <ue " enviada de
volta pelo navegador. *sse cooGie <ue torna poss:vel identiKcar um mesmo
usurio entre os diversos Rvai e voltaS de uma aplica!o Ae$.
>esta forma a cada re<uisi!o poder:amos gravar em um $anco de dados
Ls informa;es importantes da<uele momento6 vamos supor o nome do
usurio. %a pr#ima re<uisi!o pegamos novamente este identiKcador Vnico e
far:amos uma consulta em no $anco de dados6 , sa$er:amos de <ual usurio
se trata6 poder:amos ent!o arma/enar neste momento as informa;es de um
produto <ue o usurio resolver comprar e assim a vida seguiria
tran<uilamente.
*sta " uma forma primitiva e rdua de manter estado6 e#istem diversas
outras t"cnicas6 todas com seus prs e contras.
Vamos estudar algumas t"cnicas nas pr#imas sess;es desse cap:tulo.
2tili/amos essas t"cnicas para manter valores dentro da mesma pgina e para
passar valores entre pginas diferentes6 durante as re<uisi;es <ue
e#ecutamos em nosso sistema asp.net.
Mas antes de comearmos a estudar as t"cnicas vamos preparar nossa
aplica!o para <ue possamos fa/er um e#emplo prtico e rpido de cada
t"cnica de manuten!o de estado <ue iremos aprender. Implemente os passos
a seguir em nossa aplica!o para nos prepararmos para os estudos.
) [ Insira em nosso Ae$ Site uma pasta c4amada RMan*stadoS.
' [ Insira dois 5e$ forms dentro da pasta criada. + primeiro c4amado
pagInicial e o segundo c4amado pagFinal. *m todos os e#erc:cios6 <ue iremos
fa/er neste cap:tulo6 navegaremos da pagInicial para a pagFinal utili/ando
t"cnicas diferentes para mandar informa;es de uma pgina para outra.
3 [ -rie um atal4o no menu para a pagInicial. Somente a pagInicial deve
ter um atal4o6 a pagFinal n!o possui atal4o.
Aps termos preparados nossa aplica!o6 vamos estudar algumas
t"cnicas de manuten!o de estado.
T@rgetTrust Treinamento & Tecnologia 101
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
Se!!ion
2ma das formas mais simples de manuten!o de estado " atrav"s de
variveis de sess!o. -ada varivel esta associada ao cooGie de identiKca!o do
usurio. Por padr!o6 estas informa;es est!o arma/enadas no prprio processo
do ASP.%*T. 2ma novidade da era .%*T foi a possi$ilidade de arma/enamento
de informa;es de sess!o em um processo separado Num servidor de estadoO
ou at" mesmo em um S7D>. Isto trou#e novos 4ori/ontes ao desenvolvimento
de aplica;es Ae$ em ASP.%*T6 pois simpliKcou a cria!o dos c4amados Ae$
Forms6 termo <ue deKne um con,unto de servidores rodando uma aplica!o
espec:Kca.
*m nosso curso vamos estudar apenas o gerenciamento de sess!o no
prprio processo do ASP.%*T NinProcO6 <ue " o comportamento padr!o.
2ma varivel de sess!o esta associada a e#clusivamente a uma Vnica
sess!o. Isto signiKca <ue um dado arma/enado em uma varivel de nome H
para o usurio Eo!o n!o ser vis:vel na varivel de sess!o de mesmo nome do
usurio Pedro6 e vicePversa.
Sess;es podem conter <ual<uer tipo de o$,eto6 dessa forma podemos
arma/enar dentro de sess;es6 desde simples strings at" o$,etos comple#os de
nossa aplica!o6 para serem utili/ados por outras pginas ou pela prpria
pgina <ue criou a sess!o.
2tili/amos o o$,eto Session para criar as sess;es de nossa aplica!o. *ste
o$,eto " o responsvel por criar6 alterar6 e#cluir e manter as sess;es.
2tili/ando ele ns conseguimos interagir com as sess;es.
Para testarmos o uso de variveis de sess!o6 vamos implementar seu uso
em nossa aplica!o. + o$,etivo do e#erc:cio " inserirmos um te#to na
pagInicial6 arma/ernarmos esse te#to em uma session6 redirecionarmos a
nossa pgina para a pagFinal e apresentarmos o valor arma/enado na session
em uma la$el. Siga os passos a$ai#o para e#ecutar esse e#erc:cio
) [ Insira uma la$el6 uma te#tDo# e um $ot!o na pgina inicial. A te#tDo#
deve se c4amar t#tSession e o $ot!o $tnSession no campo te#t do $ot!o
colo<ue R*nviar utili/ando sessionS e no campo Te#t da la$el insira R>igite um
te#toMS + cdigo asp# deve Kcar conforme a imagem a$ai#o.
T@rgetTrust Treinamento & Tecnologia 102
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
' [ Insira uma la$el na pagFinal.asp#6 o nome da la$el deve ser
Rl$lIesultadoSessionS. + cdigo asp# da pagFinal pode ser visto a$ai#o.
3 [ >@ dois cli<ues no $ot!o $tnSession da pagInicial e insira o cdigo
a$ai#o.
%ote <ue no cdigo a$ai#o o primeiro procedimento " veriKcar se e#iste
uma session c4amada RSessionZtesteS. -aso e#ista uma session com esse
nome ela " removida com o comando 2emo!e. + pr#imo passo " adicionar o
valor digitado na te#tDo# Rt#tSessionS dentro da session c4amada
RSessionZtesteS utili/ando o comando 3. A ultima lin4a do cdigo redireciona
nossa pgina para a pagFinal.
0 [ Agora vamos na pagFinal.asp# e vamos inserir um cdigo no
PageZLoad6 <ue deve veriKcar se e#iste a session RSessionZtesteS e caso ela
e#ista deve pegar seu conteVdo e colocar dentro da la$el
Rl$lIesultadoSessionS. + cdigo deve Kcar conforme a imagem a$ai#o.
T@rgetTrust Treinamento & Tecnologia 103
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
Aps termos e#ecutado esse e#erc:cio6 rode o sistema6 navegue at" a
pagInicial e envie os dados para o outro formulrio. %ote <ue " estremamente
simples6 arma/enar e consultar valores de o$,etos session e entenda por<ue
est t"cnica " uma das mais utili/adas para arma/enar valores6 em tempo de
e#ecu!o6 nos sistemas 5e$.
T@rgetTrust Treinamento & Tecnologia 104
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
6idden>ield
2ma das formas mais simples e antigas de manter estado dentro de uma
mesma pgina " atrav"s de campos ocultos. + valor atri$u:do ao controle "
mantido na propriedade value entre post $acGs6 por"m n!o " renderi/ado na
pgina. Image um .idenField como uma te#tDo# invis:vel <ue serve para
arma/enar te#tos.
Vie5State
Imagine a seguinte situa!oM em um determinado ponto de um cadastro o
usurio6 aps informar diversos dados cadastrais6 tem <ue digitar o -*P para
<ue o sistema faa a $usca do endereo. + post $acG " acionado e <uando a
re<uisi!o volta ao navegador6 todos os dados digitados se perderam em
algum lugar do c?$erspace. -laro <ue ninguem vai criar um aplicativo com
desta forma6 por"m o e#emplo " para lem$rar <ue no ASP clssico e em outras
diversas linguagens de programa!o para Ae$6 devemos manter o estado da
pgina manualmente6 ou se,a6 digitando muitas lin4as de cdigo.
%o ASP.%*T o recurso de Vie5State mantem automaticamente os valores de
controles de servidor entre um post $acG e outro. %a verdade o Vie5State
internamente nada mais " do <ue uma campo oculto um pouco mais
soKsticado. Se voc@ rodar uma aplica!o ASP.%*T sem <ual<uer controle ver
<ue " criado um campo oculto para o arma/enamento do Vie5StateM
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"
value="/wEPDwUJ!"!D#wT#!$%S&m'()p*+,,V-.lv"S/%0dEv12hA= = " /3
%ote <ue os dados n!o s!o e#i$idos em te#to plano6 por <uest;es de
segurana. Por"m este " um recurso paliativo e n!o devemos utili/Plo para
manter dados sens:veis.
Voc@ ainda pode usar o Vie5State para adicionar RmanualmenteS valores
ao Vie5State6 lem$rando <ue voc@ vai conseguir recuperPlos apenas entre um
post $acG e outro na mesma pgina. A$ai#o um pe<ueno e#emplo de
atri$ui!o de um valor ao Vie5StateM
ViewState4"5me"6 = "T78"etT8u.t"9
T@rgetTrust Treinamento & Tecnologia 105
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
Cuer?String
+utro modelo clssico de manuten!o de estado " o atrav"s do uso de
<uer?strings6 <ue nada mais s!o do <ue con,untos de pares&valores ane#ados a
2IL6 provavelmente voc@ , deve ter visto de/enas de pginas usando este
recurso.
Sua utili/a!o " simples6 aps a 2IL voc@ adiciona o primeiro valor na
forma =-4aveeValor. Para passar mais de um con,unto6 os mesmos devem ser
concatenados atrav"s do caractere f. Para recuperar o valor na outra pgina
$asta usar Ie<uest.Cuer?String.
Vamos implementar a utili/a!o de Cuer?String em nossa aplica!o6 siga os
passos a $ai#o para implementar o e#erc:cio.
) [ Insira uma la$el6 um te#tDo# e um $ot!o na pagInicial6 logo a$ai#o dos
controles inseridos na e#erc:cio de session6 vamos utili/ar o mesmo modelo de
e#erc:cios do e#erc:cio de session6 a Vnica diferena ser na nomeclatura dos
controles. 2tili/e a imagem a$ai#o para identiKcar a nomenclatura dos
controles.
' [ Insira uma la$el c4amada l$lCuer?String na pagFinal.asp#6 logo a$ai#o
do pargrafo da la$el inserida no e#erc:cio de session. + cdigo deve Kcar
conforme a$ai#o.
3 [ >e dois cli<ues no $ot!o $tnCuer?String e insira o cdigo a$ai#o. %ote
como " utili/ado o <uer?String ao redirecionar a pgina.
0 [ V ao evento PageZLoad da pagFinal.asp# e insira o seguinte cdigo
a$ai#o do cdigo inserido no e#erc:cio anterior. %ote a forma <ue o Cuer?String
" recuperado e tem seu conteVdo escrito na l$lCuer?String.
T@rgetTrust Treinamento & Tecnologia 106
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
Aps ter inserido os cdigo rode a aplica!o6 navegue at" a pagInicial6
escreva algum te#to na te#t$o# Rt#tCue?StringS6 cli<ue no $ot!o de enviar via
Cuer?String e visuali/e o te#to sendo apresentado na pagFinal atrav"s do
envio por Cuer?String.
-ooGies
+utra forma de manuten!o de estado " atrav"s do uso de cooGies6 <ue
nada mais " do <ue um pe<ueno ar<uivo de te#to <ue arma/enado na
ma<uina do usurio. Sua grande vantagem " <ue voc@ pode identiKcar o
usurio mesmo dias depois de seu acesso a pgina. *ste recurso " muito
usado6 pro e#emplo6 em sites de com"rcio eletr\nico6 para e#i$ir as
prefer@ncias do usurio os Vltimos produtos <ue ele navegou.
+ grande pro$lema dos cooGies " <ue o usurio simplesmente pode
desa$ilitar este recurso em seu navegador.
Application
Semel4ante em diversos aspectos com variveis de sess!o6 com uma
importante diferenaM As variveis de aplica!o s!o compartil4adas entre
todos os usurios da aplica!o. 2ma varivel de aplica!o esta associada a
toda a aplica!o. Isto signiKca <ue um dado arma/enado em uma varivel de
nome H para o usurio Eo!o ser vis:vel na varivel de aplica!o de mesmo
nome do usurio Pedro6 e vicePversa.
+utra diferena importante " <ue uma varivel de aplica!o estar
dispon:vel durante toda a vida da aplica!o6 en<uanto uma varivel de sess!o
ser perdida ao Km da sess!o do usurio.
Vamos implementar um e#erc:cio mostrando a utili/a!o do application
em nossa aplica!o6 a diferena desse e#erc:cio para os outros e#erc:cios deste
cap:tulo6 " <ue vamos utili/ar somente a pagInicial. + o$,etivo desse e#erc:cio
ser arma/enar um valor em um o$,eto application e escrever esse valor em
T@rgetTrust Treinamento & Tecnologia 107
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
uma la$el dentro da pagInicial6 para mostrar <ue mesmo ao fec4armos a
aplica!o o valor do o$,eto application continuar nele6 sendo <ue o o$,eto
application s ir perder o valor ao derru$armos o servidor do asp.net. Siga os
passos a$ai#o para a implementa!o do e#erc:cio.
) [ Insira o cdigo asp# a$ai#o na pagInicial. 2tili/e a mesma
nomenclatura.
' [ >@ dois cli<ues no $ot!o R'tn3##licationS e insira o cdigo a$ai#o.
Iepare na forma de passar valor para o o$,eto application.
3 [ Insira o cdigo para gerenciar o page.Load-omplete no cdigo da
pagInicial.asp#.cs. + o$,etivo do cdigo deve ser inserir o valor do application
na la$el Rl'l2esult3##licationS. -aso o application n!o e#ista ent!o deve ser
escrito uma mensagem na la$el informando <ue o application n!o possui valor.
+ cdigo a$ai#o nos mostra como fa/er essa implementa!o.
Iode a aplica!o6 insira algum valor e cli<ue no $ot!o. %ote <ue a la$el ir
apresentar o valor digitado. Fec4e a aplica!o e entre nela novamente6 note
<ue a la$el continua apresentando valor. Agora fec4e a aplica!o6 derru$e o
servidor do asp.net e rode novamente a aplica!o. Agora note <ue a
mensagem <ue n!o e#iste nen4um valor no application voltou a ser e#i$ida.
T@rgetTrust Treinamento & Tecnologia 108
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
Voc@ pode ser perguntar como foi poss:vel recuperar o valor , <ue
ningu"m estava usando a aplica!o em determinado momento. %a verdade6
mesmo <ue ningu"m utili/a a aplica!o6 os valores de variveis de aplica!o
s ser!o perdidos <uando a Vltima sess!o e#pirar.
T@rgetTrust Treinamento & Tecnologia 109
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
$9erc8cio!
) [ 2tili/e sess;es para arma/enar o >ataSource de um gridvie5 e
carregue o grid vie5 com o data source a cada re<uisi!o feita pela pgina.
' [ 2tili/e <uer? string para deKnir a cor de fundo de uma determinada
pgina6 sendo <ue esta pgina pode ser c4amada por outras pginas6 onde a
pgina <ue c4ama deKne a cor de fundo <ue deve ser apresentada.
3 [ 2tili/e application6 para contar <uantas ve/es um usurio # se loga em
sua aplica!o.
T@rgetTrust Treinamento & Tecnologia 110
$rror4 U!e t5e 6ome tab to al7 %8tulo 1 to t5e te9t t5at 7ou :ant
to aear 5ere.
*spao para Anota;es
T@rgetTrust Treinamento & Tecnologia 111
ASP.%*T 3.5 Avanado
8.
8.
Ae$ Services
Ae$ Services
TbrgetTrust Treinamento f Tecnologia 112
Ae$ Services
;b<etivo!
Ao Knal deste cap:tulo voc@ estar apto LM
*#plicar o <ue " um Ae$ Service.
>escrever o o$,etivo e o processo por trs da c4amada de
um HML Ae$ Service a partir de um Ae$Form.
-4amar um Ae$ Service diretamente de um $ro5ser atrav"s
de .TTP N.?perte#t Transfer ProtocolO.
-riar um Ae$ Service.
-onsumir Ae$ Services de terceiros.
T@rgetTrust Treinamento & Tecnologia 113
Ae$ Services
'eb Service!
; ?ue @ um 'eb !erviceA
2m Ae$ service " um componente utili/ado na integra!o de sistemas de
plataformas diferentes. +s 5e$ services fornecem uma facilidade para clientes
e fornecedores e podem ser vistos como um componente de alcance glo$al.
+s 5e$ services usam o protocolo padr!o .TTP N.?perte#t Transfer
ProtocolO para transmitir dados e um formato de dados portvel <ue " $aseado
no HML. +s dados s!o transferidos no formato HML e encapsulados pelo
protocolo S+AP.
+ .TTP e o HML s!o tecnologias padroni/adas <ue podem ser usadas por
outros am$ientes de programa!o fora do .%et Frame5orG6 ou se,a6 voc@ pode
criar 5e$ services usando o VS '()(6 e os aplicativos cliente <ue est!o
e#ecutando em um am$iente totalmente diferente 6 como Eava6 podem usPlos.
+ inverso tam$"m " poss:vel6 voc@ pode criar 5e$ services usando Eava e
escrever aplicativos cliente usando -d.
A vis!o do cliente de um 5e$ service " a de uma interface <ue e#p;e
vrios m"todos $em deKnidos. + cliente precisa c4amar esses m"todos
usando os protocolos padr!o da internet6 passando os parQmetros em um
formato HML6 e rece$endo respostas em um formato HML.
Muitos consideram um 5e$ service como uma >LL 5e$6 visto <ue am$os
tem funcionalidades muito parecidas6 tendo como diferena <ue as >llas rodam
dentro do computador e o 5e$ service roda em um servidor 5e$.
; S;"# no! 'eb !ervice!
+ S+AP NSimple +$,ect Access ProtocolO " um protocolo constru:do so$re o
.TTP6 ele permite a comunica!o entre aplica;es rodando em diferentes
sistemas operacionais6 com diferentes tecnologias e linguagens de
programa!o.
+ S+AP deKne uma gramtica HML para especiKcar os nomes dos
m"todos <ue um cliente dese,a invocar em um 5e$ service6 deKnindo os
parQmetros e valores de retorno. Cuando um cliente invoca um 5e$ service6
ele deve especiKcar o m"todo e os parQmetros usando essa gramtica HML.
$!trutura de um 'eb !ervice
+s 5e$ services do .%*T frame5orG s!o similares aos aplicativos Ae$ do
ASP.%*T pois consistem em duas partesM o ar<uivo .asm# <ue deKne o 5e$
T@rgetTrust Treinamento & Tecnologia 114
Ae$ Services
service e um ar<uivo de cdigo -d com o suK#o .cs. + ar<uivo.cs contem o
cdigo cd para os m"todos adicionados ao Ae$ service.
+ ar<uivo .asm# cont"m somente uma lin4a como a diretiva mostrada
a$ai#oM
Tgb Ae$Service Languageeh-dh -odeDe4indehTarget.asm#.csh
-lassehService.Targeth gU
,aniulando dado! comle9o!
+ S+AP permite <ue voc@ passe estruturas de dados comple#as entre um
cliente e um 5e$ service como parQmetros de entrada6 parQmetros de sa:da ou
valores de retorno. %este caso as estruturas s!o convertidas em um formato
<ue pode ser transmitido pela rede e remontadas na outra e#tremidade6
con4ecidas como processo de seriali/a!o. + processo de seriali/a!o S+AP
converte a classe em HML6 envia a vers!o seriali/ada pela rede usando S+AP e
reconstri a classe em HML na outra e#tremidade. Podemos tam$"m
personali/ar o mecanismo de seriali/a!o usando as vrias classes de
atri$utos S+AP do namespace S?stem.Hml.Seriali/ation.
T@rgetTrust Treinamento & Tecnologia 115
Ae$ Services
Criando e utilizando um 'eb Service
Vamos implementar em nossa aplica!o um 5e$ service local. Para isso
vamos seguir os passos a$ai#o.
) [ Insira duas pastas em nosso 5e$ site. 2ma pasta c4amada
PagesAe$Service6 onde Kcar!o as pginas <ue implementaremos nesse
cap:tulo6 e uma pasta c4amada Ae$Services6 dentro desta pasta iremos inserir
o Ae$ Service local de nossa aplica!o.
' [ -li<ue com o $ot!o direito na pasta Ae$Services6 selecione ne5 item e
insira um item do tipo Ae$Service6 o nome do item deve ser -alculo. >essa
forma estamos inserindo um 5e$ service em nossa aplica!o6 $asta inserir o
item dentro da solution6 <ue ser criado o Ae$ Service.
3 [ Apague o m"todo default N.ello AorldO e insira um m"todo de clculo
c4amado soma. + cdigo do 5e$ service pode ser visto a$ai#o.
%ote <ue o m"todo Soma possui um atri$uto Ae$Met4od. *sse atri$uto
torna o m"todo dispon:vel para acesso atrav"s da 5e$. %ote tam$"m <ue o
namespace foi alterado para Kcar mais intuitivo.
>entro de um 5e$ service6 <ual<uer tipo de fun!o pode ser escrita como
um m"todo6 desde um clculo simples6 como o m"todo Soma <ue aca$amos
de implementar6 at" uma consulta comple#a em um $anco de dados.
0 [ Agora vamos incluir um 5e$ form6 na pasta PagesAe$Service6 o nome
do 5e$ form deve ser R2tili/andoAS.asp#S. Insira tr@s la$els6 dois te#t$o# e
T@rgetTrust Treinamento & Tecnologia 116
Ae$ Services
um Dutton. 2tili/e o cdigo a$ai#o para montar seu asp#. + o$,etivo do 5e$
form " apresentar duas te#t$o# para <ue o usurio insira o primeiro e o
segundo valor a serem somados e <uando for clicado no $ot!o6 ser c4amado
o m"todo do 5e$ form e o resultado ser e#i$ido na la$el l$lIesultado.
5 [ >@ dois cli<ues no $ot!o $tnProcessar e implemente um cdigo <ue
crie um o$,eto do tipo do 5e$ service e depois utili/e esse o$,eto para c4amar
o m"todo de soma6 passando os valores das te#t$o# para os parQmetros dos
m"todos. + resultado do m"todo deve ser passado para a la$el l$lIesultado. +
cdigo a$ai#o apresenta como deve ser implementado o m"todo do $ot!o.
1 [ Insira uma op!o no menu para c4amar a pgina6 rode a aplica!o e
visuali/e o nosso 5e$ service local funcionando perfeitamente. Podemos ver
como " simples implementar um 5e$ service com o .net frame5orG 0.(. At" o
frame5orG vers!o 3.5 era necessrio criar um pro,eto do tipo asp.net 5e$
service6 agora com o frame5orG 0.( $asta criar um 5e$ site normal e adicionar
um item do tipo 5e$ service para dentro do 5e$ site.
X importante lem$rar <ue os tipos utili/ados como parQmetro e tam$"m
os tipos utili/ados como retorno do m"todo do Ae$Service s!o transformados
em HML antes de serem transportados do cliente para o servidor6 por tanto6
devemos utili/ar classes e tipos <ue se,am seriali/veis.
T@rgetTrust Treinamento & Tecnologia 117
Ae$ Services
C5amando um 0,L 'eb Service or 6%%#
+ processo de c4amar um Ae$ Service por .TTP6 tam$"m c4amado de
acesso direto6 " tipicamente usado por desenvolvedores em tempo de
desenvolvimento para identiKcar e testar Ae$ Services. + acesso direto
permite <ue se ve,a os m"todos6 propriedades e o resultado de um Ae$
Service em um am$iente amigvel para o desenvolvedor.
+ primeiro passo para acessar um Ae$ Service " encontrar um. Para
encontrar Ae$ Services se utili/a servios de $usca. *sses servios de $usca
est!o evoluindo e mudando rapidamente conforme a tecnologia gan4a
aceita!o na comunidade da Internet.
+ processo para encontrar e utili/ar um Ae$ Service " como segueM
). >esenvolvedores de Ae$ Services pu$licam descri;es e locali/a;es
para seus Ae$ Services em um servio universal c4amado 2>>I
N2niversal >escription6 >iscover? and IntegrationO.
'. Se consulta o site do 2>>I para encontrar Ae$ Services dispon:veis
<ue satisfaam as necessidades re<ueridas. + site do 2>>I oferece
uma lista de Ae$ Services <ue incluem o ar<uivo .disco N>iscover?
File P >IS-+O com 2ILs para os Ae$ Services.
3. *scol4ePse um Ae$ Service e se acessa o ar<uivo >IS-+ para locali/ar
a 2IL do Ae$ Service e o documento AS>L NAe$ Services >escription
LanguageO.
0. -onstriPse um o$,eto pro#? a partir do documento AS>L.
2ma classe pro#? " um cdigo <ue se parece e#atamente com a
classe <ue ela representa] entretanto6 a classe pro#? n!o cont"m
nen4uma lgica da aplica!o. Ao inv"s disso6 a classe pro#? cont"m
cdigo de convers!o e transporte lgico. 2m o$,eto pro#? permite <ue
um cliente acesse um Ae$ Service como se ele fosse um o$,eto -+M
local.
5. 2saPse o o$,eto pro#? para c4amar o Ae$ Service
1. 2saPse o Ae$ Service a partir de uma Ae$Form por meio do pro#?.
T@rgetTrust Treinamento & Tecnologia 118
Ae$ Services
A especiKca!o do 2>>I deKne uma maneira de pu$licar e procurar
informa;es a respeito de um Ae$ Service e a respectiva empresa <ue fornece
o mesmo. *mpresas registram individualmente informa;es so$re seus Ae$
Services para <ue se,am utili/ados por outras empresas. Aps o registro6 o Ae$
Service Kca dispon:vel de forma gratuita para <ual<uer um <ue <ueira utili/ar o
servio.
Aps ter encontrado um Ae$ Service no 2>>I6 usaPse a 2IL .asm# para
navegar at" a pgina de descri!o6 na <ual fornece informa;es so$re o <ue o
Ae$ Service fa/6 os m"todos <ue ele cont"m6 seus parQmetros e respostas.
Tam$"m " poss:vel utili/ar a pgina de descri!o para testar as
funcionalidades do Ae$ Service.
Ao acessar a pgina de descri!o do Ae$ Service6 o $ro5ser mostra todos
os m"todos dispon:veis. -licando em um m"todo mostra os parQmetros
necessrio para e#ecutar tal m"todo.
Tam$"m podePse clicar no linG RService >escriptionS6 no topo da pgina de
descri!o6 para ver o contrato AS>L6 na <ual cont"m uma descri!o em HML
do Ae$ Service.
Para c4amar um m"todo do Ae$ Service6 devePse preenc4er os
parQmetros e clicar em RInvoGeS. + Ae$Form passa o nome do m"todo6 os
parQmetros necessrios e seus respectivos valores para a 2IL do Ae$ Service.
+ Ae$ Service sempre retorna o resultado no formato HML.
T@rgetTrust Treinamento & Tecnologia 119
Ae$ Services
Utilizando um 'ebService e9terno
Vamos implementar em nossa aplica!o a utili/a!o de um Ae$Service
e#terno. Siga os passos a$ai#o para e#ecutar este e#erc:cio.
) [ Insira um 5e$ form6 na pasta PagesAe$Service6 c4amado
2tili/andoAS*#terno.asp#.
' [ -li<ue com o $ot!o direito no 5e$ site e selecione a op!o RAdd Ae$
Ieference . . . R6 sempre <ue <uisermos utili/ar um 5e$ service e#terno em
nossa aplica!o devemos adicionar uma 5e$ reference.
3 [ %o campo url6 digite o camin4o do 5e$ service <ue dese,a utili/ar6
neste e#erc:cio digiteM
.TTPM&&555.$ron/e$usiness.com.$r&5e$services&5scep.asm# e cli<ue em 7o.
Aps o visual Studio $uscar e apresentar as informa;es do 5e$ service digite
5s-ep Nnome amigvel <ue utili/aremos em nosso cdigo para c4amar os
o$,etos e m"todos do 5e$ serviceO e cli<ue em Add Ieference. 2tili/e a Kgura
a$ai#o como refer@ncia.
Aps termos adiciona a 5e$ reference podemos utili/ar o 5e$ service
como <ual<uer outro o$,eto em nossa aplica!o.
T@rgetTrust Treinamento & Tecnologia 120
Ae$ Services
0 [ >ando se<u@ncia ao nosso e#erc:cio6 adicione uma pasta c4amada
-lassesApoio no 5e$ site6 dentro desta pasta vamos inserir classes au#iliares
para nossos e#erc:cios.
5 [ Insira uma classe c4amada *ndereco.cs dentro da pasta -lassesApoio6
utili/aremos essa classe para arma/enar os valores do 5e$ service e mandar
as informa;es para a pgina de interface. -rie as propriedades dessa classe
conforme imagem a$ai#o.
1 [ Insira uma classe c4amada -onsulta-*P.cs. *ssa classe ir possuir um
m"todo esttico <ue ir retornar um o$,eto *ndereco. + m"todo ir consultar o
5e$ service enviando um numero de -*P6 o 5e$ service ir retornar as
informa;es relacionadas com o -*P e o m"todo preenc4er o o$,eto de
retorno *ndereco com as informa;es rece$idas do 5e$ service. A imagem
a$ai#o mostra a implementa!o desta classe.
T@rgetTrust Treinamento & Tecnologia 121
Ae$ Services
%ote <ue o servio " c4amado da mesma maneira <ue criar uma nova
instQncia de um o$,eto <ual<uer. Pode ser visto tam$"m <ue o m"todo RcepS
do 5e$ service retorna um S?stem.>ata.>ataSet com uma >ataTa$le <ue
possui somente um >ataIo5 com as informa;es referente ao -*P.
8 [ Agora vamos implementar os controles da pgina
2tili/andoAS*#terno.asp#. + o$,etivo " implementar uma te#tDo# onde o
usurio digite o -*P <ue dese,a $uscar informa;es e <uando ele clicar em um
$ot!o de processamento6 o sistema $us<ue as informa;es do -*P digitado e
escreva elas em outras te#tDo#. Insira o cdigo asp# a$ai#o na pgina
2tili/andoAS*#terno.asp#.
T@rgetTrust Treinamento & Tecnologia 122
Ae$ Services
3 [ >@ dois cli<ues no $ot!o -onsultar -*P e insira o cdigo a$ai#o.
9 [ Insira a c4amada da pgina no menu principal do sistema e rode a
aplica!o6 navegue at" a pgina6 insira algum -*P vlido6 cli<ue em -onsultar
-*P e visuali/e as informa;es apresentadas.
%ote como " simples e funcional utili/ar 5e$ services de terceiros6 aps
termos criado uma 5e$ reference6 temos acesso ao 5e$ service como se ele
fosse um o$,eto <ual<uer dentro de nossa aplica!o.

T@rgetTrust Treinamento & Tecnologia 123
Ae$ Services
$9erc8cio!
*stes e#erc:cios vis!o revisar o conteVdo visto ao longo deste cap:tulo
so$re HML Ae$ Services.
). +nde devePse procurar informa;es so$re Ae$ Services dispon:veis=
'. -omo poderia se testar um Ae$ Service rapidamente para ver os
m"todos e parQmetros <ue ele disponi$ili/a=
3. >esenvolva um 5e$ service <ue reali/e a soma entre ' nVmeros e
teste no $ro5ser.
T@rgetTrust Treinamento & Tecnologia 124
Ae$ Services
*spao para Anota;es
T@rgetTrust Treinamento & Tecnologia 125
ASP.%*T 3.5 Avanado
3.
3.
2tili/ando AEAH no ASP.%*T
2tili/ando AEAH no ASP.%*T
TbrgetTrust Treinamento f Tecnologia 126
2tili/ando AEAH no ASP.%*T
;b<etivo!
Ao Knal deste cap:tulo voc@ estar apto LM
*ntender o <ue " o A,a#]
2tili/ar o controle ScriptManager]
2tili/ar o controle 2pdatePanel]
Iegistrar scripts a partir do ScriptManager]
2tili/ar A,a#-ontrolToolGit]
T@rgetTrust Treinamento & Tecnologia 127
2tili/ando AEAH no ASP.%*T
; ?ue @ "/"0 A
Por AEAH entendemos Ass?nc4ronous EavaScript And HML6 <ue signiKca
e#ecu!o ass:ncrona de ,avascript com uso de HML. A tecnologia AEAH do
Microsoft ASP.%*T permite a cria!o de pginas 5e$ pages <ue incluem uma
e#peri@ncia rica do usurio com elementos mais responsivos e interativos com
a interface do usurio N2IO. + AEAH do ASP.%*T fornece as $i$liotecas de script
de cliente <ue incorporam *-MAScript NEavascriptO crossP$ro5ser e tecnologias
dinQmicas do .TML N>.TMLO6 al"m de integrarPse com a plataforma de
desenvolvimento voltada ao servidor do ASP.%*T. 2sando AEAH6 voc@ pode
mel4orar a e#peri@ncia do usurio e a eKci@ncia de suas aplica;es 5e$.
Por <ue usar AEAH no ASP.%*T=
AEAH permite construir aplica;es 5e$ ricas com muitas vantagens so$re
as aplica;es 5e$ $aseadas totalmente no servidor. Alguns dos $enef:cios
oferecidos pela tecnologia AEAH s!oM
*Kci@ncia mel4orada e#ecutando partes signiKcativas de pgina no
$ro5ser6 ao inv"s do servidor
*lementos familiares de 2I tais como indicadores do progresso6
tooltips6 e ,anelas popPup.
2pdates parcial da pgina6 onde somente as partes da 5e$ page
<ue mudaram s!o atuali/adas
-ompati$ilidade com os $ro5sers os mais populares e geralmente
os mais usados6 <ue inclui o Internet *#plorer6 Firefo#6 -4rome6 etc.
Adi!o de scripts via cdigo .%et.
-omportamento semel4ante a aplica;es 5indo5s forms.
Cuanto a performance6 a utili/a!o do A,a# n!o tem um impacto
signiKcativo.
2tili/ando A,a# em uma aplica!o Ae$
Para entendermos a utili/a!o do A,a#6 vamos implementar seu uso em
nossa aplica!o e a cada tpico <ue iremos estudando vamos ir aumentando
nossa implementa!o.
+ primeiro passo " preparar o $sico em nossa aplica!o para <ue
possamos reali/ar e#erc:cios. Siga os passos.
) [ Adicione uma pasta c4amada A,a# em nosso 5e$ site.
T@rgetTrust Treinamento & Tecnologia 128
2tili/ando AEAH no ASP.%*T
' [ Adicione um 5e$ form c4amado pagA,a#7eral.asp# dentro da pasta
criadaY
3 [ Adicione um item no menu da aplica!o <ue faa a c4amada de
pgina.
0 [ Insira os seguintes controles na pagA,a#7eral.asp#M >uas la$els6 uma
te#tDo# e um Dutton. + o$,etivo " digitar um te#to6 dar uma pausa no
processamento e apresentar o te#to digitado na la$el de resultado6 dessa
forma poderemos ver a pgina sendo carregada de forma normal e a pgina
sendo carregada pelo A,a#. 2tili/e o cdigo a$ai#o como $ase para montar o
asp#.
5 [ >@ dois cli<ues no $ot!o $tn+G e insira o cdigo a$ai#o. Leia os
comentrios do cdigo para entender o o$,etivo de cada lin4a.
1 [ Iode o sistema6 navegue at" a pgina6 digite algum te#to e cli<ue no
$ot!o. Iepare <ue o sistema ir dar uma pausa de 3 segundos no
processamento Nem fun!o da c4amada do m"todo SleepO6 en<uanto ocorre o
processamento note <ue a $arra de progresso do navegador " apresentada6
isso mostra <ue uma re<uisi!o foi enviada para o servidor e a pgina est
aguardando a resposta.
Aps esse passo , temos o $sico para iniciarmos o estudo do A,a# em
nossa aplica!o.
Cuando nos referirmos aos controles A,a#6 lem$rePse <ue eles est!o na
cai#a de ferramentas6 na a$a A,a#*#tension.
T@rgetTrust Treinamento & Tecnologia 129
2tili/ando AEAH no ASP.%*T
+ controle ScriptManager
Toda a pgina <ue utili/a os recursos do AEAH necessita de um controle em
especial6 o controle c4amado Script Manager. + ScriptManager " responsvel
por gerenciar toda a comunica!o da pgina com o servidor6 atuando como um
Pro#? de comunica!o. Todos os scripts da pgina s!o gerenciados pelo
ScriptManager.
Se <uisermos utili/ar A,a# em uma pgina6 " o$rigatria a utili/a!o de
um ScriptManager ou de um controle <ue derive dele.
Se e#ecutarmos uma pgina <ue cont"m um controle scriptManager6
podemos perce$er <ue no cdigo .TML ser renderi/ado uma s"rie de scripts
<ue permitem o uso das fun;es do AEAH.
Toda pgina asp# pode ter somente um controle ScriptManager.
Insira um controle ScriptManager na pgina pagA,a#7eral.asp#6 insira o
controle acima da tag .'.
Iode o sistema e perce$a <ue nada ocorre6 por<ue o ScriptManager
tra$al4a em con,unto com o controle 2pdatePanel.
T@rgetTrust Treinamento & Tecnologia 130
2tili/ando AEAH no ASP.%*T
+ controle 2pdatePanel
2ma das grandes vantagens dos controles AEAH do ASP.%*T " <ue eles n!o
re<uerem tanta codiKca!o como outras implementa;es de AEAH dispon:veis.
2m dos e#emplos disso " o controle 2pdatePanel. + controle updatepanel nos
permite indicar na pgina <uais os conteVdos <ue poder!o ser alterados
durante um post$acG.
Cuando inserimos um 2pdatePanel ele automaticamente " gerenciado
pelo ScriptManager da pgina.
+ controle 2pdatePanel atua como um container6 sendo <ue ele possui
uma tag interna c4amada -ontentTemplate6 onde todo o conteVdo inserido
dentro do -ontentTemplate ir ter seus m"todos e comportamento
gerenciados pelo A,a#.
+ 2pdatePanel possui tam$"m a tag Triggers6 onde s!o associados
controles e respectivos eventos <ue o 2pdatePanel deve Kcar associado.
Veremos a utili/a!o de Triggers mais adiante em nosso capitulo.
Para entendermos o funcionamento do 2pdatePanel6 insira esse controle6
logo a$ai#o do ScriptManager6 na pgina pagA,a#7eral6 a$ra a tag
-ontentTemplate do 2pdatePanel e arraste todo o conteVdo do asp# <ue
t:n4amos inserido antes6 para dentro da tag -ontentTemplate. Se $aseie na
Kgura a$ai#o para arrumar o cdigo asp#.
T@rgetTrust Treinamento & Tecnologia 131
2tili/ando AEAH no ASP.%*T
Aps ter e#ecutado essa a!o rode o sistema6 digite algo e cli<ue no $ot!o
$tn+G. -onseguiu notar a diferena= Agora parece <ue a pgina n!o est
fa/endo nada e simplesmente a l$lIesultado apresenta o te#to6 sem <ue a
pgina se,a recarregada.
*sse " o comportamento de pginas <ue utili/am o A,a#. + processo de
re<uisi!o e espera ao servidor " mascarado e a pgina n!o " toda
renderi/ada6 apenas o conteVdo de dentro do 2pdatePanel " atuali/ado. *
mesmo assim esse processo n!o " apresentado para o usurio.
+ -ontrole 2pdateProgress
Cuando utili/amos A,a# o processamento passa desperce$ido para o
usurio da aplica!o6 mas muitas ve/es " interessante avisar o usurio <ue
est sendo efetuado um processamento6 para isso temos o controle
2pdateProgress.
+ controle 2pdateProgress apresenta uma estrutura .TML6 deKnida pelo
programador6 para o usurio <uando um processamento est acontecendo.
+ conteVdo <ue deve ser apresentado deve ser colocado dentro da tag
interna do 2pdateProgress c4amada ProgressTemplate.
Vamos inserir um 2pdateProgress em nossa aplica!o para entendermos o
comportamento do controle.
Primeiramente adicione na solution um gif <ue represente a a!o de
processamento Num $om site para $ai#ar gifas " o 555.a,a#load.infoO.
Adicione um controle 2pdateProgress logo a$ai#o do fec4amento do
controle 2pdatePanel e insira o cdigo <ue pode ser visto na Kgura a$ai#o.
Agora rode o sistema e ve,a <ue <uando voc@ disparar um processamento
o 2pdateProgress ser apresentado.
+ -ontrole Timer
+utro controle dispon:vel na plataforma AEAH do ASP.%*T " o controle de
Timer. + controle de timer permite <ue a pgina e#ecute post$acGs em um
intervalo regular de tempo6 conforme as conKgura;es do controle.
T@rgetTrust Treinamento & Tecnologia 132
2tili/ando AEAH no ASP.%*T
+ controle de Timer pode ser utili/ado em aplica;es de tr@s cenrios.
Atuali/ar periodicamente o conteVdo de um 2pdatePanel sem
atuali/ar a pgina inteira
*#ecutar uma determinada fun!o de post$acG no servidor a cada
intervalo deKnido no Timer
Postar a pgina para o servidor de maneira s:ncrona6 fa/endo com
<ue toda a pgina se,a atuali/ada
+ controle de Timer possui uma propriedade Timer6 <ue indica o nVmero
de milissegundos em <ue o evento da pgina deve acontecer.
Vamos inserir um controle Timer em nossa aplica!o para <ue possamos
entender $em o seu funcionamento.
)P Adicione o cdigo a$ai#o6 logo a$ai#o da a$ertura do pargrafo de
dentro do -ontentTemplate do 2pdatePanel.
' [ >@ dois cli<ues no controle Timer e adicione um cdigo ao evento TicG
<ue atuali/e a l$l>ata com a data atual do sistema. + cdigo a$ai#o apresenta
como fa/er isso.
Iode o sistema e visuali/e <ue a cada segundo a l$l>ata apresenta a data
e a 4ora atual do sistema.
Triggers
+ 2pdatePanel possui a tag Triggers. *ssa tag tem a funcionalidade de
acoplar controles fora do -ontentTemplate com o 2pdateProgress6 permitindo
<ue o 2pdatePanel gerencie <ual<uer controle da pgina.
>entro da tag Triggers utili/amos a tag As?ncPostDacGTrigger6 dentro
desta tag preenc4eremos as propriedades -ontrolI> com o nome do controle
T@rgetTrust Treinamento & Tecnologia 133
2tili/ando AEAH no ASP.%*T
<ue <ueremos associar ao Trigger e a propriedade *vent%ame com o nome do
evento <ue ser acoplado com o 2pdatePanel.
Vamos inserir a utili/a!o de Triggers em nossa aplica!o para <ue
possamos ter um pleno entendimento. Siga os passos a$ai#o para
implementar o e#erc:cio.
) [ Arraste o controle Timer) para fora do 2pdatePanel.
' [ adicione uma tag Triggers no 2pdatePanel6 acima da a$ertura da tag
-ontentTemplate6 dentro da tag Triggers adicione um As?ncPostDacGTrigger e
preenc4a a propriedade -ontrolI> com o nome do Timer e a propriedade
*vent%ame adicione o te#to TicG <ue ir fa/er refer@ncia ao evento TicG do
timer. + resultado do asp# pode ser visto na Kgura a$ai#o.
Iode a aplica!o e visuali/e <ue o updatePanel continua gerenciando o
evento ticG do timer6 mesmo com o timer estando fora do -ontentTemplate.
Inclus!o de Scripts via ScriptManager
2ma funcionalidade muito importante <ue o ScriptManager possui " gerar6
via cdigo .net6 cdigo script na pgina.
A cria!o de scripts " reali/ada utili/ando os m"todos da classe
responsvel pelo ScriptManager e n!o pelo controle.
T@rgetTrust Treinamento & Tecnologia 134
2tili/ando AEAH no ASP.%*T
+ m"todo utili/ado " o Iegister-lientScriptDlocG6 <ue rece$e como
parQmetro o local onde ele deve inserir o script Nno caso a prpria pginaO6 o
tipo do o$,eto6 uma nomenclatura do script para efetuar o registro6 o script e
uma $oolen <ue indica se deve registrar a tag do script.
Vamos implementar essa funcionalidade em nossa aplica!o. Adicione um
$ot!o c4amado $tnScripts6 na pgina pagA,a#7eral.asp#6 e o te#to do $ot!o
deve ser R>isparar alert ,avascriptS.
>@ dois cli<ues no $ot!o e insira o cdigo a$ai#o. >epois rode a aplica!o6
cli<ue no $ot!o e visuali/e um alert ,avascript sendo criado a partir de
cdigo .net.
T@rgetTrust Treinamento & Tecnologia 135
2tili/ando AEAH no ASP.%*T
"/"0 Control %oolFit
+ AEAH -ontrol ToolGit " um pacote adicional <ue cont"m uma s"rie de
controles desenvolvidos para a plataforma AEAH ASP.%*T. *ste pacote n!o "
instalado ,unto com as e#tens;es de AEAH para o ASP.%*T6 deve ser instalado
separadamente No linG para o pacote de instala!o encontraPse no site do AEAH
ASP.%*T N.TTPM&&a,a#.asp.netO.
Ten4a muito cuidado na 4ora do do5nload para $ai#ar a vers!o do
frame5orG 0.( do A,a# -ontrol ToolGit. %o prprio site do A,a#-ontrolToolGit
e#iste $astante material escrito e v:deos <ue e#plicam como utili/ar os
controles.
Aps a instala!o " aconsel4vel <ue voc@ adicione os controles em sua
tool$o# do Visual Studio.%*T. Para isto6 $asta seguir os seguintes passos.
). -li<ue com o $ot!o direito so$re a tool$o#
'. Selecione a op!o Add Ta$
3. >@ a ta$ o nome de AEAH -ontrol ToolGit
0. -li<ue com o $ot!o direito so$re a rea va/ia na nova se!o da tool$o#
e selecione R-4oose Items...S
5. -li<ue no $ot!o $ro5se e selecione a >LL A,a#-ontrolToolGit.>LL <ue se
encontra na pasta de instala!o do ToolGit.
Aps seguir estes passos os controles do toolGit estar!o dispon:veis para
uso na sua tool$o#6 conforme a Kgura a seguir.
T@rgetTrust Treinamento & Tecnologia 136
2tili/ando AEAH no ASP.%*T
T@rgetTrust Treinamento & Tecnologia 137
2tili/ando AEAH no ASP.%*T
Utilizando controle! do "<a9 Control %oolFit
Agora vamos implementar em nossa aplica!o a utli/a!o de alguns
controles pertencentes ao A,a# -ontrol ToolGit.
>entro do ToolGit temos diversos controles6 mas para apresentarmos a
facilidades de utili/a!o desses controles6 vamos aprender a utili/ar 3
controles6 o Validator-allout*#tender6 o -ollapsi$lePanel*#tender e o
Popup-ontrol*#tender.
Para utili/ar os outros controles pertencentes ao A,a# -ontrol ToolGit6
consulte a documenta!o <ue pode ser encontrada no site do toolGit.
Validator-allout*#tender
+ controle Validator-allout*#tender tem como o$,etivo ser um e#tensor
dos validadores do asp.net6 adicionando a eles um comportamento mais
amigvel e a possi$ilidade de personali/ar a apar@ncia do validador.
Vamos implementar a utili/a!o de um Validator-allout*#tender em nossa
aplica!o. Siga os passos a$ai#o para e#ecutar essa implementa!o.
) [ Insira um 5e$ form c4amado pagValidatour na pasta A,a# de nossa
aplica!o.
' [ Insira o cdigo a$ai#o no asp# de pagValidatour. %o momento <ue for
inserir o Validator-allout*#tender6 arraste o controle da tool$o# do
A,a#-ontrolTool`it.
T@rgetTrust Treinamento & Tecnologia 138
2tili/ando AEAH no ASP.%*T
%ote <ue n!o estamos utili/ando o ScriptManager e sim o
Tool`itScriptManager. Para utili/armos os controles do ToolGit devemos sempre
utili/ar o Tool`itScriptManager. *ste controle 4erda as implementa;es do
ScriptManager e possui algumas altera;es de otimi/a!o com os controles do
toolGit.
3 [ >@ dois cli<ues no $ot!o Processar e insira um cdigo <ue escreva na
l$lIesultado a data e a 4ora atual.
0 [ -rie uma op!o no menu principal para c4amar a pgina e rode o
sistema. %!o digite nen4um valor da te#t$o# e cli<ue no $ot!o. %ote <ue vai
aparecer um R$al!oS informando ao usurio <ue ele necessita digitar algum
te#to. *sse R$al!oS " o controle Validatour-allout*#tender. A apar@ncia do
controle pode ser customi/ada6 a apar@ncia de R$al!oS " a default. Visuali/e na
Kgura a$ai#o como o controle " apresentado.
T@rgetTrust Treinamento & Tecnologia 139
2tili/ando AEAH no ASP.%*T
-ollapsi$lePanel*#tender
+ controle -ollapsi$lePanel*#tender tem a funcionalidade de Kcar
vinculado com pain"is Nou com <ual<uer controle do tipo container visualO e
apresentar&esconder as informa;es do painel conforme rece$a cli<ues.
Para <ue ocorra o entendimento das funcionalidades deste controle vamos
implementar sua utili/a!o em nossa aplica!o. Siga os passos a$ai#o.
) P Insira um 5e$ form c4amado pag-ollapsi$le na pasta A,a# de nossa
aplica!o.
' [ Insira o cdigo a$ai#o no asp# da pag-ollapsi$le.
%ote <ue foi inserido dentro do panel panel-orpoInf algumas tags $r e um
te#to <ual<uer. X importante salientar <ue a cor do panel-orpoInf " vermel4a.
T@rgetTrust Treinamento & Tecnologia 140
2tili/ando AEAH no ASP.%*T
*stamos utili/ando isso em nosso e#erc:cio para destacar as informa;es
<uando elas ser!o e#i$idas.
3 [ -rie um item no menu para c4amar a pgina e rode nossa aplica!o.
-li<ue no panel a/ul <ue " apresentado e note <ue o panel vermel4o "
apresentado6 cli<ue novamente no panel de ca$eal4o e perce$a <ue o panel
vermel4o " escondido.
Popup-ontrol*#tender
+ controle Popup-ontrol*#tender tem a Knalidade de adicionar um popup
a algum controle. Isso " muito utili/ado em Ae$ Mails6 como o gmail ou o
4otmail6 <uando vamos escrever algum o nome do destinatrio do email e logo
a$ai#o da cai#a de digita!o nos " apresentada um popup com os emails <ue
temos cadastrado.
Vamos implementar sua utili/a!o em nossa aplica!o para <ue ocorra o
entendimento de suas funcionalidades. Siga os passos a$ai#o.
) P Insira um 5e$ form c4amado pagPopup na pasta A,a# de nossa
aplica!o.
' [ Insira o cdigo a$ai#o no asp# da pgina pagPopup.
T@rgetTrust Treinamento & Tecnologia 141
2tili/ando AEAH no ASP.%*T
%ote <ue foi inserido um cdigo css dentro da pgina este cdigo "
utili/ado para dar uma apar@ncia ao panel <ue ser utili/ado como popup. %o
Popup-ontrol*#tender " conKgurado o controle <ue deve rece$er o popup
NTarget-ontrolI>O6 o controle <ue deve ser apresentado com o popup-ontrol
NPopup-ontrolI>O e posi!o <ue deve ser apresenado em rela!o ao controle
NPositionO.
3 [ Selecione o controle IadionDuttonList)6 crie um evento
SelectedInde#-4anged e insira o cdigo a$ai#o.
0 [ -rie um item no menu para a pgina e rode a aplica!o. -li<ue com o
mouse so$re a te#tDo# e ve,a <ue ser apresentado um popup com o panel.
Selecione um item do panel e ve,a o te#to da listItem ser escrito na te#tDo#.
T@rgetTrust Treinamento & Tecnologia 142
2tili/ando AEAH no ASP.%*T
T@rgetTrust Treinamento & Tecnologia 143
2tili/ando AEAH no ASP.%*T
$!ao ara anotaGe!
9.
9.
IeJection
IeJection
T@rgetTrust Treinamento & Tecnologia 144
2tili/ando AEAH no ASP.%*T
;b<etivo!
Ao Knal deste cap:tulo voc@ estar apto LM
*ntender o <ue " o IeJection]
2tili/ar Assem$l?6 Assem$l?%ame e Mdulos]
-ompreender o T?pe]
Implementar IeJe#!o em sua aplica!o]
T@rgetTrust Treinamento & Tecnologia 145
2tili/ando AEAH no ASP.%*T
; ?ue @ 1e2ectionA
IeJection " um con,unto de classes <ue permitem acessar e manipular
assem$lies6 mdulos6 tipos e os metadados <ue eles cont@m. Por e#emplo6
voc@ pode utili/ar reJection para enumerar assem$lies6 mdulos e classes
carregadas e os m"todos6 propriedades6 campos e eventos <ue cada tipo
e#p;e. + reJection desempen4a um papel fundamental no .net frame5orG 0.(
e funciona como um $loco de constru!o para outras partes importantes do
runtime. + runtime utili/a a reJe#!o em muitas circunstancias6 por e#emplo6
para enumerar os campos <uando um tipo est sendo seriali/ado ou <uando
sofre mars4aling para um outro processo ou para uma m<uina. + visual
Studio utili/a a reJe#!o transparentemente sempre <ue voc@ acessa um
m"todo de um o$,eto por vincula!o tardia.
+ cdigo relacionado L reJe#!o em geral utili/a os tipos no namespace
S?stem.IeJection. A Vnica classe utili/ada pela reJe#!o fora desse namespace
" S?stem.T?pe6 <ue representa um tipo em mdulo gerenciado.
Funcionalidades e gan4os de utili/ar reJe#!o em nossa
aplica!o
A utiili/a!o de reJe#!o em nossas aplica;es tem como principais
funcionalidades a automati/a!o de m"todos e a cria!o de ar<uiteturas
gen"ricas.
2tili/ando reJe#!o podemos criar comparadores universais6 atri$uidores
de valores gen"ricos6 personali/a!o de m"todos a partir de comparadores de
tipos ou atri$utos6 etc. *ssa utili/a!o proporciona gan4os tremendos em
<uest;es como segurana de cdigo6 otimi/a!o de processamento6
reutili/a!o de cdigo e gan4os de produtividade.
*m fun!o da grande gama de implementa;es <ue a reJe#!o
disponi$ili/a ao desenvolvedor ela " amplamente utili/ada em sistemas
comple#os.
2ma das desvantagens de utili/ar reJection " a comple#idade do cdigo
gerado6 mas depois do programar dominar as t"cnicas de reJe#!o6 essa
desvantagem n!o " t!o impactante.
+ tipo Assem$l?
+ tipo Assem$l? representa um assem$l? .%et. *sse tipo n!o oferece um
m"todo construtor por<ue voc@ nunca realmente cria um assem$l?6 mas
simplesmente o$t"m uma refer@ncia a um assem$l? e#istente.
Aps carregarmos o assem$l? o o$,eto ir fornecer uma forma de de$ugar
e inspecionar as propriedades do assem$l?.
T@rgetTrust Treinamento & Tecnologia 146
2tili/ando AEAH no ASP.%*T
VeriK<ue na imagem a$ai#o algumas formas de carregar o Assem$l?.
+ tipo Assem$l?%ame
A classe Assem$l?%ame representa o o$,eto <ue o .net utili/a para
arma/enar a identidade e recuperar as informa;es so$re um assem$l?. 2m
o$,eto Assem$l?%ame completamente especiKcado tem um nome6 uma
cultura e um nVmero de vers!o6 mas o runtime tam$"m pode utili/ar o$,etos
Assem$l?%ame parcialmente preenc4idos ao procurar um assem$l? a ser
vinculado ao cdigo c4amador. Mais comumente6 voc@ o$t"m uma refer@ncia a
um o$,eto Assem$l?%ame e#istente utili/ando a propriedade 7et%ame do
o$,eto Assem$l?.
+ tipo Module
A classe Module representa um dos mdulos em um assem$l?. Voc@ pode
enumerar todos os mem$ros em um Assem$l? utili/ando o m"todo
Assem$l?.7etModules.
*sta classe serve para destrinc4ar as funcionalidades de um assem$l?.
T@rgetTrust Treinamento & Tecnologia 147
2tili/ando AEAH no ASP.%*T
T@rgetTrust Treinamento & Tecnologia 148
2tili/ando AEAH no ASP.%*T
%rabal5ando com %io!
A classe S?stem.T?pe " central para todas as a;es de reJe#!o. *la
representa um tipo gerenciado6 um conceito <ue inclui classes6 estruturas6
mdulos6 interfaces e enums. A classe t?pe fornece todos os meios de
enumerar campos6 propriedades6 m"todos e eventos de um tipo6 $em como
conKgurar propriedades e campos e invocar m"todos dinamicamente.
Iecuperando um o$,eto T?pe
A classe T?pe n!o possui nen4um construtor por<ue nunca " criado um
o$,eto T?pe6 ao inv"s disso6 sempre " o$tido uma refer@ncia a um tipo
e#istente. Cuando utili/amos um o$,eto T?pe6 estamos pegando um tipo
e#istente e utili/ando esse tipo para sofrer o m#imo de intera;es poss:veis
com nosso cdigo6 como veriKcar se o tipo " uma classe6 um enum6 uma
estrutura ou uma interface.
2tili/amos a classe T?pe para destrinc4ar completamente um o$,eto ao
ponto de descer6 em seus maiores detal4es6 para conseguirmos criar um
cdigo mais soKsticado6 reutili/vel e gen"rico possivel.
T@rgetTrust Treinamento & Tecnologia 149
2tili/ando AEAH no ASP.%*T
Utilizando 1e2ection em no!!a alicao
At" agora vimos $astante teorias so$re a utili/a!o de reJe#!o6 seus
o$,etos e seus gan4os6 agora vamos implementar o uso de reJection em nossa
aplica!o.
A implementa!o ser a utili/a!o de reJection para preenc4er os
controles da tela6 genericamente6 a partir de um arra? <ue ir servir como
fonte de dados.
Siga os passos a$ai#o para efetuar essa implementa!o.
) [ Adicionar uma classe c4amada Item na pasta -lassesApoio e crie as
propriedades da classe conforme a Kgura a$ai#o. A classe item ser a classe
$ase para o arra? <ue ser a fonte de dados.
' [ Adicione uma classe DasePaginas na Pasta -lassesApoio6 essa classe
servir como $ase para todas as pginas <ue <ueiram utili/ar reJection. -omo
" uma classe $ase ela deve 4erdar a S?stem.Ae$.2I.Page6 para <ue as pginas
<ue 4erdem dela rece$am as funcionalidades de uma pgina. 2tili/e a Kgura
a$ai#o como $ase para montar sua classe
T@rgetTrust Treinamento & Tecnologia 150
2tili/ando AEAH no ASP.%*T
3 [ Insira os m"todos de reJe#!o na classe DasePaginas6 o o$,etivo desses
m"todos " rece$er um o$,eto e preenc4er gen"ricamente6 utili/ando reJe#!o6
os controles te#tDo#6 da tela6 <ue possuam o mesmo nome <ue as
propriedades do o$,eto. Visuali/a as duas imagens a$ai#o para criar os
m"todos.
T@rgetTrust Treinamento & Tecnologia 151
2tili/ando AEAH no ASP.%*T
0 [ -rie uma pasta na aplica!o c4amada IeJection e dentro desta pasta
insira um 5e$ form c4amado pagIeJection.asp#.
5 [ Adicione o segundo cdigo no evento PageZLoad da pgina. *ste
cdigo ir criar uma fonte de dados faGe para o nosso e#erc:cio.
T@rgetTrust Treinamento & Tecnologia 152
2tili/ando AEAH no ASP.%*T
1 [ Arrume a 4erana do 5e$ form6 agora ao inv"s dele 4erdar de
S?stem.Ae$.2I.Page ele ir 4erdar de DasePaginas.
8 [ Insira os controles a$ai#o no asp# da pgina.
T@rgetTrust Treinamento & Tecnologia 153
2tili/ando AEAH no ASP.%*T
3 [ >@ dois cli<ues no Dutton) e insira o cdigo a$ai#o.
9 [ -rie uma op!o no menu <ue c4ame a pgina6 rode o sistema6 acesse
a pgina6 escreva um numero de ( L 9 e ve,a como os controles ser!o
preenc4idos via reJection6 sem <ue se,a especiKcado diretamente o
preenc4imento de cada controle e sim utili/ando a estrutura de preenc4imento
gen"rica criada a partir do IeJection.
T@rgetTrust Treinamento & Tecnologia 154
2tili/ando AEAH no ASP.%*T
$!ao ara anotaGe!
T@rgetTrust Treinamento & Tecnologia 155
2tili/ando AEAH no ASP.%*T
)(.
)(.
>istri$uindo sua
>istri$uindo sua
Aplica!o
Aplica!o
T@rgetTrust Treinamento & Tecnologia 156
2tili/ando AEAH no ASP.%*T
;b<etivo!
Ao Knal deste capitulo voce estar apto aM
*ntender as diretivas de compila!o]
Pu$licar sua aplica!o asp.net]
T@rgetTrust Treinamento & Tecnologia 157
2tili/ando AEAH no ASP.%*T
3i!tribuindo !ua "licao "S#.N$%
%ormalmente todo o soft5are6 depois de Knali/ado6 deve ser distri$u:do.
Aplica;es convencionais na sua maioria s!o distri$u:das atrav"s de
instaladores espec:Kcos6 o <ue permite <ue <ual<uer usurio possa instalar a
aplica!o em seu computador de maneira fcil6 simplesmente seguindo alguns
passos $sicos.
Aplica;es Ae$ na sua maioria s!o instaladas em um Vnico ou em alguns
poucos servidores. Voc@ pode simplesmente copiaPla para o destino ou at"
mesmo gerar um instalador6 como numa aplica!o convencional.
Mas al"m de distri$uir sua aplica!o e#istem outros cuidados <ue voc@
deve ter antes de colocar sua aplica!o em produ!o.
Primeiramente <uando voc@ cria sua aplica!o6 por padr!o ele vai estar
com a depura!o 4a$ilitada. A depura!o " 4a$ilitada no ar<uivo 5e$.conKg.
A depura!o6 como voc@ deve imaginar6 permite <ue voc@ depure seu
aplicativo. Isto tem um custoM Alguns ar<uivos temporrios t@m <ue ser
mantidos e o desempen4o da aplica!o " afetado. Cuando voc@ roda seu
aplicativo pela primeira ve/6 dentro da I>* do VS6 uma cai#a de dialogo
informa <ue a depura!o esta desa$ilitada. Voc@ pode 4a$ilitPla ou rodar a
aplica!o sem depura!o6 <ue seria o e<uivalente a e#ecutPla fora da
am$iente do VSM
Ao autori/ar a 4a$ilita!o de depura!o6
Tcompilation de$ugehtrueh targetFrame5orGeh0.(hU
+ <ue isto tem a ver com distri$ui!o de aplica!o= X importante lem$rar de
desa$ilitar a depura!o <uando compilar sua aplica!o para distri$ui!o6 pois
ser gerado um cdigo otimi/ado e mais compacto.
+utra dica importante " colocar a aplica!o em modo de Iealise6 no prprio
VS6 como na imagem a$ai#oM
T@rgetTrust Treinamento & Tecnologia 158
2tili/ando AEAH no ASP.%*T

Pu$licando sua aplica!o
A ferramenta de pu$lica!o cria uma cpia pr"Pcompilada de seu 5e$ site.
Para acionPlo $asta clicar com o $ot!o direito no 5e$ site e selecionar a op!o
RPu$lis4...S conforme a imagem a$ai#o.
Ser apresentada uma ,anela onde iremos selecionar a op!o de
pu$lica!o <ue <ueremos e#ecutar. Podemos pu$licar direto para um servidor
5e$6 um servidor FTP6 um diretrio de sistema ou servidor na rede interna e
via FPS*.
A Kgura a$ai#o apresenta as op;es.
T@rgetTrust Treinamento & Tecnologia 159
2tili/ando AEAH no ASP.%*T
-ada op!o ter suas respectivas conKgura;es e aps devemos clicar em
Pu$lis4 e o Visual Studio Kcar encarregado de reali/ar o resto do processo.
T@rgetTrust Treinamento & Tecnologia 160
2tili/ando AEAH no ASP.%*T
$!ao ara "notaGe!
T@rgetTrust Treinamento & Tecnologia 161

Você também pode gostar