Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila PDF
Apostila PDF
www.marcelosincic.com.br
Pgina 1 de 41
Ol,
Criei estas apostilas a mais de 5 anos e atualizei uma srie delas com alguns dados adicionais.
Muitas partes desta apostila est desatualizada, mas servir para quem quer tirar uma dvida ou
aprender sobre .Net e as outras tecnologias.
Perfil Microsoft: https://www.mcpvirtualbusinesscard.com/VBCServer/msincic/profile
Marcelo Sincic trabalha com informtica desde 1988. Durante anos trabalhou com desenvolvimento (iniciando com
Dbase III e Clipper S'87) e com redes (Novell 2.0 e Lantastic).
Hoje atua como consultor e instrutor para diversos parceiros e clientes Microsoft.
Recebeu em abril de 2009 o prmio Latin American MCT Awards no MCT Summit 2009, um prmio entregue a apenas
5 instrutores de toda a Amrica Latina (http://www.marcelosincic.eti.br/Blog/post/Microsoft-MCT-Awards-AmericaLatina.aspx).
Recebeu em setembro de 2009 o prmio IT HERO da equipe Microsoft Technet Brasil em reconhecimento a projeto
desenvolvido (http://www.marcelosincic.eti.br/Blog/post/IT-Hero-Microsoft-TechNet.aspx). Em Novembro de 2009
recebeu novamente um premio do programa IT Hero agora na categoria de especialistas
(http://www.marcelosincic.eti.br/Blog/post/TechNet-IT-Hero-Especialista-Selecionado-o-nosso-projeto-de-OCS2007.aspx).
Acumula por 5 vezes certificaes com o ttulo Charter Member, indicando estar entre os primeiros do mundo a se
certificarem profissionalmente em Windows 2008 e Windows 7.
Possui diversas certificaes oficiais de TI:
MCITP - Microsoft Certified IT Professional Database Administrator SQL Server 2008
MCITP - Microsoft Certified IT Professional Database Administrator SQL Server 2005
MCITP - Microsoft Certified IT Professional Windows Server 2008 Admin
MCITP - Microsoft Certified IT Professional Enterprise Administrator Windows 7 Charter Member
MCITP - Microsoft Certified IT Professional Enterprise Support Technical
MCPD - Microsoft Certified Professional Developer: Web Applications
MCTS - Microsoft Certified Technology Specialist: Windows 7 Charter Member
MCTS - Microsoft Certified Technology Specialist: Windows Mobile 6. Charter Member
MCTS - Microsoft Certified Technology Specialist: Windows 2008 Active Directory Charter Member
MCTS - Microsoft Certified Technology Specialist: Windows 2008 Networking Charter Member
MCTS - Microsoft Certified Technology Specialist: System Center Configuration Manager
MCTS - Microsoft Certified Technology Specialist: System Center Operations Manager
MCTS - Microsoft Certified Technology Specialist: Exchange 2007
MCTS - Microsoft Certified Technology Specialist: Windows Sharepoint Services 3.0
MCTS - Microsoft Certified Technology Specialist: SQL Server 2008
MCTS - Microsoft Certified Technology Specialist: .NET Framework 3.5, ASP.NET Applications
MCTS - Microsoft Certified Technology Specialist: SQL Server 2005
MCTS - Microsoft Certified Technology Specialist: Windows Vista
MCTS - Microsoft Certified Technology Specialist: .NET Famework 2.0
MCDBA Microsoft Certified Database Administrator (SQL Server 2000/OLAP/BI)
MCAD Microsoft Certified Application Developer .NET
MCSA 2000 Microsoft Certified System Administrator Windows 2000
MCSA 2003 Microsoft Certified System Administrator Windows 2003
Microsoft Small and Medium Business Specialist
MCP Visual Basic e ASP
MCT Microsoft Certified Trainer
SUN Java Trainer Java Core Trainer Approved
IBM Certified System Administrator Lotus Domino 6.0/6.5
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Arquitetura do ASP.NET.................................................................................4
Formulrios .....................................................................................................6
2.1
Pgina 2 de 41
2.2
Criao e Configurao de Pginas.......................................................7
2.2.1 ViewState e Postback ............................................................................8
2.2.2 Utilizando Cdigos na Pgina ................................................................8
2.2.3 Navegando entre pginas ......................................................................9
2.2.4 Request e Response............................................................................ 10
2.3
Utilizando Controles .............................................................................. 11
2.3.1 Inserindo Cdigos em Controles .......................................................... 11
2.3.2 Codificao Interna .............................................................................. 13
3
Validadores ................................................................................................... 14
3.1
3.2
3.3
3.4
3.5
3.6
4.2
4.3
Cookies ................................................................................................... 19
4.4
4.5
Themes ................................................................................................... 21
4.6
Skins ....................................................................................................... 23
AJAX.Net ....................................................................................................... 24
6.2
Utilizando o DataGrid ............................................................................ 30
6.2.1 Utilizando Link no Grid ......................................................................... 31
7
Segurana de Acesso................................................................................... 36
8.1
8.2
8.3
www.marcelosincic.com.br
Verso: 2.0
8.4
9
www.marcelosincic.com.br
Pgina 3 de 41
9.2
10 Distribuio ................................................................................................... 41
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 4 de 41
1 Arquitetura do ASP.NET
Uma aplicao baseada em formulrios Windows utiliza os recursos locais da mquina do cliente,
necessitando que instale o .NET Framework e um poder de processamento acima de Pentium II 300
e memria de 64 MB, alem de exigir Windows 98 ou superior.
Com estas caractersticas limitamos em muito a distribuio e utilizao fora do ambiente
corporativo.
Com os recursos presentes e adicionados nos browsers web e a aplicao de servidores inteligentes
e no apenas transmissores de textos, foi possvel criar um ambiente de aplicaes rico e funcional.
Podemos separar os modelos de comunicao e processamento web na famlia Microsoft em 3
fazes.
A primeira fase iniciou-se com o Windows NT 4.0 e o IIS 2.0 que fazia apenas o transporte de dados,
recebendo uma solicitao de pgina e retornando o texto do html sem qualquer processamento
prvio antes da resposta:
As linhas delimitadas pelo sinal <% eram tags chamadas de diretivas, ou seja, cdigo que antes de
retornar ao cliente era processada, e o que chegava no cliente era:
<HTML>
<P>Bem Vindo</P>
<P>Agora so 09:41:30</P>
</HTML>
Este modelo era lento pois o servidor era obrigado a ler a pgina e substituir os dados, ou seja,
trabalhava em modo interpretado, ocasionando erros de desenvolvimento e a sintaxe para os
programadores no era bem checada por no haver compilao.
Para ganhar performance eram criados componentes compilados e chamados pelas diretivas para
serem includos.
Outra desvantagem do ASP era a necessidade de montar a pgina manualmente, uma vez que era
necessrio colocar a diretiva exatamente no local onde queremos que aparece a hora, como no
exemplo acima.
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 5 de 41
No modelo atual as pginas no precisam ser processadas, uma vez que as diretivas no precisam
mais ser utilizadas e passamos a ter o conceito de Code Behind, onde a parte dos cdigos
compilada e se transforma em uma dll e a pgina com as tags html ficam em um arquivo texto
comum, que ser mesclado ao resultado do processamento da dll.
Ganha-se performance por no mais interpretar o cdigo pgina por pgina e a construo dos
cdigos idntica ao desenvolvimento comum, onde colocamos uma caixa de texto na pgina e a
manipulamos utilizando os mtodos e propriedades comuns, como feito em aplicaes de
formulrios Windows.
Outra interessante incluso a capacidade do servidor adaptar a pgina e o retorno html ao cliente
conforme a verso do browser e sistema operacional, incluindo celular wap.
O modelo grfico pode ser representado da seguinte forma:
Verso: 2.0
www.marcelosincic.com.br
Pgina 6 de 41
2 Formulrios
Assim como uma aplicao de formulrios, uma aplicao ASP.NET um projeto com estrutura de
diretrios, podendo utilizar classes, namespace e todos os outros recursos do framework.
Cada projeto web cria um subdiretrio no servidor web e dentro deste um diretrio de nome bin onde
estar a dll de todas as pginas.
Ou seja, para cada pgina criada, que tambm pode ser chamada de formulrio web, criado um
arquivo com extenso aspx que contem o html da pgina e um arquivo com extenso aspx.cs ou
aspx.vb dependendo da linguagem, e neste residem os cdigos.
Os arquivos aspx por ser o modelo html da pgina copiado normalmente para funcionamento,
enquanto os arquivos de cdigo no so copiados pois todos eles se transformam na dll do site,
lembrando que cada projeto (que tambm um site) tem uma nica dll.
Ao utilizar este tipo de projeto automaticamente o VS 2008 ir abrir uma pgina de nome
webform1.aspx que a pgina padro de todos os projetos.
A figura abaixo mostra os principais componentes da aplicao web e do projeto:
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 7 de 41
Podemos criar novas pginas por clicar sobre o nome do projeto com o boto direito e escolher a
opo Add...Web Form.
Para renomear pginas clique com o boto direito sobre ela e escolha Rename. Ao renomear uma
pgina note que o nome da classe no alterado, este teria que ser feito manualmente caso deseje.
Note que a primeira linha a configurao da pgina, onde identificamos no primeiro atributo a
linguagem utilizada, na segunda tag temos o arquivo onde a classe com cdigos estar.
A terceira tag estar sendo discutida a frente e a quarta tag, a mais importante, indica o nome da dll
que ser compilada e o nome da classe que dever estar na dll. Ou seja, neste caso teremos um
arquivo WebApplication1.dll no diretrio bin do site e dentro desta dll o CRL ir procurar uma classe
chamada WebForm1 que tem os cdigos da pgina acima.
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 8 de 41
Ao alterar a tag de herana lembre-se de tambm renomear a classe, pois se na pgina estiver um
nome e a classe estiver com outro nome no ser executado nenhum dos cdigos.
Nas propriedades do objeto Document e form1 podemos configurar o titulo da pgina que aparece
no browser, a imagem de fundo (marca dgua), som de fundo, linguagem dos scripts de cliente e de
servidor, etc.
Por ultimo, a aba keywords um texto livre utilizado pelos sites de busca como google, yahoo e
outros para resumir a pgina, sendo opcional sua utilizao.
2.2.1 ViewState e Postback
Nas propriedades do form1 temos a opes EnableViewState. Esta propriedade cria um campo
oculto no formulrio com os dados preenchidos nos controles, evitando que tenhamos a necessidade
de realimenta-los manualmente.
Para entender melhor isto, precisamos entender o postback, uma vez que este processo essencial
na arquitetura do ASP.NET.
No ASP.NET existe apenas um form sempre. Para utilizar diversos botes no formulrio utilizamos
sempre do tipo submit, o que permite que o servidor saiba qual boto foi clicado.
O processo de postback quando o servidor recebe os dados que o cliente digitou em uma caixa de
texto ou qualquer outro controle, faz o processo interno e retorna ao cliente a mesma pgina j com
processo completo e devidamente alterada.
Antes do ASP.NET quando uma pgina chamava outra e a pgina voltava do servidor as caixas de
texto precisavam ser programaticamente preenchidas com os valores digitados. No ASP.NET isto
no necessrio pois o prprio servidor se encarrega de devolver as caixas de texto e quaisquer
outros controles j com os dados que estavam digitados.
Podemos desligar o postback pela pgina ou pelo prprio controle, uma vez que todos os controles
tem a propriedade AutoPostBack e EnableViewState.
O autopostback muito utilizado em combo para que quando o usurio escolher um valor na lista,
por exemplo o estado, este valor enviado ao servidor que popula a lista de Cidades e retorna ao
cliente.
A propriedade enableviewstate utilizada pois caso um controle no possa retornar preenchido,
como senha, este valor desabilitado, impedindo que ao ser enviado ao servidor e retornar venha
com o valor anterior.
2.2.2 Utilizando Cdigos na Pgina
Para acessar cdigos, seja da pgina ou em controles, basta utilizar o duplo clique do mouse, assim
como fazemos em formulrios windows.
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 9 de 41
Veja a similaridade entre os eventos de uma aplicao Windows, como por exemplo, o TextChanged
da caixa de texto, onde no Windows se chama apenas Changed, mas tem a mesma funcionalidade.
Como exemplo de cdigo no carregamento da pgina podemos alterar o texto da caixa e o nome do
boto, portanto teramos o cdigo abaixo no load:
TextBox1.Text = "Digite seu nome";
Button1.Text = "Clique Aqui";
Agora temos um problema em decorrncia de termos utilizado o load, pois a cada postback este
evento ocorre novamente e o nome do usurio perdido, por ser realimentado.
Podemos evitar que isto acontea por testar se o load um postback ou se o primeiro
carregamento desta pgina.
A propriedade que permite isto IsPostback e utilizada como abaixo:
if(!IsPostBack)
{
TextBox1.Text = "Digite seu nome";
Button1.Text = "Clique Aqui";
}
else
Button1.Text = "Clique de novo...";
Com o cdigo acima, na primeira execuo a condio verdadeira, pois ainda no um postback,
portanto a caixa de texto alimentada.
No momento em que o boto for clicado o postback passa a ser verdadeiro e isto faz com que
apenas o boto tenha seu texto alterado.
2.2.3 Navegando entre pginas
Complementando o exemplo, ao digitar o nome correto no textbox queremos que seja redirecionado
para o site da Curso, ento precisamos validar o que foi digitado e enviar o cliente para o site
desejado.
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 10 de 41
Isto pode ser feito no evento click do boto, onde iremos verificar o que est digitado na caixa de
texto e utilizando o objeto Response chamamos o mtodo Redirect onde informamos o URL.
Veja o exemplo no cdigo abaixo que foi colocado no click do boto:
private void Button1_Click(object sender, System.EventArgs e)
{
if(TextBox1.Text == "taquaritinga")
Response.Redirect("http://www.Curso.com.br");
}
Neste exemplo enviamos o usurio a pgina da Curso, mas em momento algum informamos a Curso
de onde este usurio est vindo.
Para isso utilizamos o mtodo get, ou seja, enviar dados entre pgina utlizando a URL.
O cdigo alterado agora informando a origem seria:
private void Button1_Click(object sender, System.EventArgs e)
{
if(TextBox1.Text == "taquaritinga")
{
string URL = "http://www.Curso.com.br";
URL += "?Origem=" + TextBox1.Text;
Response.Redirect(URL);
}
}
Desta forma enviamos uma varivel para a pgina da Curso de nome Origem com valor taquaritinga.
2.2.4 Request e Response
Para lermos um valor na pgina de destino utilizamos o objeto Request, como no exemplo acima,
com o cdigo:
Label1.Text = Request["Origem"].ToString();
Funo
Permite ler os cookies do cliente
Retorna as propriedades do tipo de browser do cliente
Mtodo que o cliente utilizou para enviar dados
Booleano indicando se o cliente est anonimo ou identificado
Booleano indicando se a conexo se deu em HTTPS
Indica o site e a pgina chamada pelo cliente
Retorna um array com dados como o tipo de browser, IP do cliente, etc.
Retorna o sistema operacional e verso do browser utilizado
Nome do cliente, recebido atravs de DNS
Endereo IP do cliente
Array com os idiomas que o cliente suporta
Como pode ser visto na relao, o objeto request nos fornece todos os dados necessrios para
conhecer melhor o cliente e a conexo.
O objeto response envia os dados para o cliente ou manipula a conexo:
Mtodo ou Propriedade
Cookies
Cache
Close
End
Expires
www.marcelosincic.com.br
Funo
Permite gravar cookies no cliente
Configura cache do servidor para reaproveitamento de pginas prvias
Fecha a conexo com o cliente, que recebe um erro
Termina a resposta e envia o resultado imediatamente
Define o tempo de expirao da pgina, que se ultrapassado o cliente deve refazer a consulta
Reproduo e distribuio livre
Verso: 2.0
Flush
ServerVariables
Write
www.marcelosincic.com.br
Pgina 11 de 41
Conhecer e saber utilizar os objetos request e response importante ao lidarmos com qualquer
aplicao, pois com eles manipulamos chamadas e dados entre pginas.
A pgina acima foi criada com uma caixa de texto, um objeto legenda (label) e um boto.
O cdigo de load da pgina faz o label ficar invisvel e o click do boto altera o text.
Veja o cdigo utilizado abaixo:
private void Page_Load(object sender, System.EventArgs e)
{
Label1.Visible = false;
if(!IsPostBack)
{
TextBox1.Text = "Digite seu nome";
Button1.Text = "Clique Aqui";
}
else
Button1.Text = "Clique de novo...";
}
private void Button1_Click(object sender, System.EventArgs e)
{
Label1.Visible = true;
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 12 de 41
Agora vamos descrever um exemplo onde a primeira pgina recebe uma pequena ficha de inscrio
e a segunda pgina mostra os dados. Abaixo o layout das duas pginas:
O cdigo implementado na pgina de cadastro ter cdigo apenas no boto, sendo o mtodo de
envio dos dados por get, conforme o cdigo abaixo:
private void btnEnviar_Click(object sender, System.EventArgs e)
{
string URL = "RecebeCadastro.aspx";
URL += "?Nome=" + txtNome.Text;
URL += "&Endereco=" + txtEndereco.Text;
URL += "&Telefone=" + txtTelefone.Text;
Response.Redirect(URL);
}
Veja que concatenamos uma nica string e utilizamos para redirecionamento, sendo o endereo final
aps a montagem, o seguinte cdigo:
http://localhost/WebApplication1/RecebeCadastro.aspx?Nome=aa&Endereco=bb&Telefone=cc
Na pgina que recebe o cadastro processamos os dados no load conforme o exemplo abaixo:
private void Page_Load(object sender, System.EventArgs e)
{
lblNome.Text = Request["Nome"].ToString();
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 13 de 41
lblEndereco.Text = Request["Endereco"].ToString();
lblTelefone.Text = Request["Telefone"].ToString();
}
Veja que os cdigos acima referenciam cada um dos controles utilizados com o tipo e o nome
utilizados.
Portanto, ao renomear um controle, note que tambm precisamos renomear o cdigo de referencia.
O mesmo acontece se for utilizado um editor de pginas html e incluirmos um controle, precisamos
manualmente inserir a referencia a ele no code behind.
Caso no seja includa uma referencia no code behind especfica com o mesmo nome da
propriedade name no html, ao clicar no boto no sero disparados os eventos.
Esse cuidado muito interessante pois no ocorrem erros de compilao se o controle html estiver
com nome diferente, uma vez que posso utilizar normalmente controles html nativos por motivo de
scripts, assim como tambm podemos criar objetos no code behind sem que estes sejam grficos.
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 14 de 41
3 Validadores
O framework possui cinco controles prprios para validaes, sendo de comportamento automtico e
til ao encapsularem cdigos trabalhosos, seja no cliente ou no servidor.
Trataremos cada um destes controles individualmente a seguir
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 15 de 41
Funo
til ao comparar um controle com outro, como por exemplo, confirmao de senha e email.
Indica se a comparao ser de igualdade ou diferena do controle ou valor desejado
Tipo de dado a ser comparado, como string, numero, data, etc.
Utilizado quando a comparao for para valor fixo
Verso: 2.0
www.marcelosincic.com.br
Pgina 16 de 41
Validao
Uma ou mais letra ou digito
Seqncia composta
Um dos trs caracteres pode ser utilizado, mas apenas um deles
Uma ou mais letra ou digito, neste caso como est dentro de seqncia com os caracteres acima, indica que todas as
vezes que um dos trs for utilizado tem que existir letras ou dgitos formando o conjunto
A seqncia pode ser repetir n vezes
Literal
O ponto obrigatrio aps letras ou dgitos e deve existir seqncia
Por exemplo, podemos montar a estrutura de CEP como \d{5}-\d{3} onde estamos indicando cinco
dgitos, um ponto e mais trs dgitos.
if(txtNome.Text.Length <= 5)
args.IsValid = false;
}
O que pode ser notado de diferente neste evento a presena do isvalid indicando que o controle
dever ficar visvel e os dados do formulrio no devem ser enviados.
Para utilizar um script de validao no cliente podemos notar a propriedade ClientValidationFunction
onde podemos colocar o nome de uma funo de cliente para validar o controle, como o cdigo
abaixo:
<script language="javascript">
function ValidaNome(oSrc, args)
{
if(Form1.txtNome.value.length <= 5)
{
alert("Voce ativou o script do nome");
args.IsValid = false;
}
}
</script>
O cdigo acima tem a funo de verificar o tamanho e validar ou no, mas desta vez utilizando
diretamente o cliente, sem a necessidades dos dados terem que ser enviados ao servidor para este
fazer a validao.
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 17 de 41
Note que os validadores apareceram apenas no sumrio, mas para isto nas propriedades display
dos validadores colocamos none. Com isto, os validadores individualmente no iro estar visveis,
mas o sumrio sim.
Tambm note na figura acima a propriedade ShowMessageBox e ShowSummary, permitindo
escolher entre aparecer o sumrio como o exemplo acima, ou ento utilizando uma caixa de
mensagem ou as duas formas de interao juntas.
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 18 de 41
4 Gerenciando Estado
Sempre necessrio guardar dados em algum tipo de repositrio para podermos consultar este
dado posteriormente.
Uma das formas de guardar estes dados utilizando controles hidden que ficam na pgina ou ento
utilizando get, mas nestes casos o usurio poder ter acesso ao dado e altera-lo, executando com
direito elevado, por exemplo, por mudar o nome do usurio.
Para guardar dados utilizamos as variveis de sesso, mas precisamos conhecer tambm outros
objetos, abordados adiante.
Com o cdigo acima conseguimos garantir a atualizao, uma vez que caso j esteja travada por
algum o usurio seguinte espera at poder tambm utilizar.
Verso: 2.0
www.marcelosincic.com.br
Pgina 19 de 41
Em termos de segurana podemos afirmar que as variveis de sesso a forma mais utilizada e
confivel, pois o usurio no tem como ler diretamente estes valores e nem como altera-los por
cdigo de script cliente.
4.3 Cookies
A terceira forma de utilizar valores e reaproveit-los utilizando os cookies.
Estes so arquivos texto criados na maquina do usurio, so facilmente lidos e alterados pelo
usurio final, o que compromete a segurana.
Em certos casos os cookies so teis como, por exemplo guardar dados no confidenciais do
usurio para quando este retornar a pginas os valores j estarem preenchidos.
A alterao de cdigo abaixo reflete a pgina de cadastro agora com os dados preenchidos e
guardados no cookie:
private void Page_Load(object sender, System.EventArgs e)
{
if(Request.Cookies["Nome"] != null)
{
txtNome.Text = Request.Cookies["Nome"].Value.ToString();
txtEndereco.Text = Request.Cookies["Endereco"].Value.ToString();
txtTelefone.Text = Request.Cookies["Telefone"].Value.ToString();
}
}
Note que foi utilizados o objeto request, aquele que permite ler dados do cliente, e este nos fornece
os valores guardados nos cookies por referenciarmos o nome da varivel.
necessrio antes de utilizar os valores de cookies verificar se estes no esto nulos, pois caso
ainda no existam iro retornar exception.
Abaixo segue o cdigo que gravar os cookies, sendo agora desnecessrio passar os dados do
usurio pelo get como anteriormente era feito:
private void btnEnviar_Click(object sender, System.EventArgs e)
{
Response.Cookies["Nome"].Value = txtNome.Text;
Response.Cookies["Nome"].Expires = DateTime.Now.AddMinutes(20);
Response.Cookies["Endereco"].Value = txtEndereco.Text;
Response.Cookies["Endereco"].Expires = DateTime.Now.AddMinutes(20);
Response.Cookies["Telefone"].Value = txtTelefone.Text;
Response.Cookies["Telefone"].Expires = DateTime.Now.AddMinutes(20);
Response.Redirect("RecebeCadastro.aspx");
}
Para ser criado os valores no cookie utilizamos o objeto response que envia dados ao usurio, com o
nome da varivel informada.
Note que ao gravar um cookie necessrio informar a data de expirao, uma vez que se esta data
no for informada, o cookie se torna temporrio.
A data de expirao do cookie pode ser informada em horas, minutos, segundos ou mesmo data
completa. No exemplo acima utilizamos a data atual mais vinte minutos como data de expirao.
Verso: 2.0
www.marcelosincic.com.br
Pgina 20 de 41
Note pelo exemplo acima que o texto Minha pgina padro est fora do quadro
ContentPlaceHolder1, portanto aparecer em todas as pginas.
Para criar uma pgina utilizando o mestre acima possvel utilizar pginas j existentes, porem ser
necessrio retirar todas as tags de form para cima e para baixo, pois o objeto formulrio nestes
casos j est na pgina mestre.
Ao criar uma pgina escolha o template Web Content Form que na sequencia pede o nome da
pgina mestre desejada e traz o layout abaixo. Note que as tags de formulrio, cabealho e corpo
no existem, pois como j abordado esto dentro da mestre.
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 21 de 41
Todo o contedo especifico dever ficar dentro do quadro, sendo que nem possvel alterar a
mestre, a no ser clicando no boto onde aparece o nome da pgina. Note que na diretiva da pgina
contem o atributo MasterPageFile indicando a pgina mestre. O sinal ~ serve para indicar a raiz do
site em qualquer local em que estiver a pgina ou link desejado.
Caso a pgina mestre tenha que ser alterada por cdigo, o nico evento que d suporte o PreInit
do formulrio.
4.5 Themes
O recurso de Temas a incorporao ao Visual Studio do j conhecido recurso Cascading Style
Sheet (CSS). Este recurso padro do HTML permite definir um padro para que todas as tags fiquem
pradronizadas.
Vale a pena fazer a resalva de que o CSS altera o layout de tags HTML e no de tags ASP, ou seja,
s funcionar corretamente quando envolve tags no browser padro a que se desenvolve, podendo
gerar diferente tipo de layout em browsers alternativos, uma vez que o cdigo gerado pelo servidor
varia conforme as capacidades e recursos do browser do cliente. Veja abaixo o exemplo de um CSS:
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 22 de 41
Para chegar a esta tela criamos uma nova ASP Folder do tipo Themes e dentro da pasta
colocamos um arquivo do tipo Style Sheet. Para adicionar um novo elemento, ou a tag, a ser
alterada utilizamos a opo Add Style Rule com o boto direito do mouse, que serve para incluir
apenas as tags no contedo. Aps com o boto direito escolha a opo Build Style e configure
como quer que a tag aparea no browser. O resultado da pgina pode ser visto abaixo:
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 23 de 41
Para definir o tema bastou indicar na propriedade Theme o nome da pasta criada anteriormente e
em StyleSheetTheme o nome do arquivo css criado a pouco, e automaticamente ocorreu a
alterao.
Com este recurso, mudar o layout das letras e tags incluindo tabelas e outros contedos HTML ficou
muito mais fcil, bastando alterar os arquivos css.
4.6 Skins
Vimos acima como os temas podem ajudar em muito o layout, mas ressaltamos o problema de que
as tags no tema se referem ao HTML gerado no browser, o que pode causar problemas
principalmente em dispositivos mveis.
Uma forma de tambm utilizar o conceito de um padro, porem baseado nas tags ASP utilizar os
skins. Eles devem ser adicionais dentro do tema, como um arquivo de skin, com o formato abaixo:
<asp:TextBox runat=server BackColor=AliceBlue Font-Names="Arial"></asp:TextBox>
<asp:Label runat=server BackColor=Beige Font-Names="Courier" Font-Size=Large></asp:Label>
Como podemos notar so exatamente as mesmas tags utilizadas no cdigo da pgina ASP, porem
sem a tag ID. Veja o resultado grfico:
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 24 de 41
5 AJAX.Net
O AJAX uma tecnologia para renderizao parcial de pginas HTML, que muito utilizada em sites
como Google, Live Search, MSN e outros para atualizar blocos de pgina. Todo o processo de troca
de dados com o servidor ocorre em background.
O controle no Visual Studio foi criado de forma grfica e baseada em eventos, o que facilitou muito o
uso do AJAX, que complexo quando construdo a mo.
O controle ScriptManager precisa estar em todas as pginas em que for utilizado o AJAX, pois ele
faz o controle. Como em nosso exemplo a pgina mestre j contem um ScriptManager no seria
necessrio colocar em cada um dos formulrios.
O controle Timer permite criar, por exemplo, uma pgina onde parte dos controles se atualizariam de
tempos em tempos.
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 25 de 41
No exemplo acima o timer est configurado para rodar a cada 1 segundo (mil miliesegundos) e no
evento Tick do timer alteramos o label1 com a hora atual. Para dizer que o evento Tick utiliza a
tecnologia do AJAX utilizamos o controle UpdatePanel (onde o label est includo. Neste objeto
indicamos qual o evento que ir gerar a atualizao do contedo, como mostrado abaixo nas
propriedades do UpdatePanel:
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 26 de 41
Note a referencia ao evento Tick do objeto Timer1. Isso indica que a cada ciclo do timer o contedo
do painel ser totalmente atualizado, independente dos controles que nele contenham. Portanto,
caso exista em um formulrio diversos controles que se atualizam em momentos diferentes, como
por exemplo diversos botes de ao, devemos ter vrios updatepanels.
O resultado do cdigo acima uma pgina com um relgio que se atualiza a cada segundo, sem
fazer a navegao completa da pgina.
O controle Update Progress cria um painel dentro da pgina que nas propriedades ligado a um
dos Update Panels e mostrado enquanto ocorre a navegao em background. Alm da
propriedade onde indicado a qual Update Panels ele est vinculado, tambm indicamos o tempo
aps o qual o contedo do Update Progress ir ser ativado.
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 27 de 41
Alem de indicar a tabela e as colunas desejadas, note que possvel fazer os filtros no boto
Where e alterar a ordenao no boto Order By. No boto Advanced indicamos se dever ser
gerado os comandos de Insert e Update para manuteno dos dados. Porem, na maior parte dos
casos as alteraes so efetuadas em comandos programaticamente. Na sequencia da tela acima
um boto Test Query permitir fazer o teste da query.
A tela a seguir mostra as propriedades do controle Data Source e alterar o tempo de expirao do
cache, alterar os comandos de banco de dados e escolher se ser gerado um DataSet ou um
DataReader. A escolha deste ultimo item ajudar na manipulao programtica dos dados gerados
pelos objetos de dados.
www.marcelosincic.com.br
Verso: 2.0
6.1
www.marcelosincic.com.br
Pgina 28 de 41
A diferena do dropdowlist, ou combo, que este tem dois locais para configurar origem.
A primeira propriedade DataTextField indica a coluna que servir de origem para a lista que a combo
apresenta, e a propriedade DataValueField em que coluna o valor corrente est na tabela.
Ou seja, para montarmos uma lista de estados a propriedade Data Field to Display ser a tabela de
estados e a coluna Nome, enquanto na propriedade Data Value to Value utilizamos a tabela de
clientes, coluna UF.
A figura abaixo mostra a tela de configurao da combo:
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 29 de 41
O Datalist tem uma construo diferenciada no .NET por utilizar o conceito de templates.
Ao colocar uma lista de dados no seu formulrio, aparecer apenas a figura abaixo:
Ao clicar com o boto direito no controle poder escolher montar o cabealho, rodap e itens que a
lista mostrar, e para isso ter que arrastar legendas, caixas de texto, caixas de checagem e
qualquer outro controle. Ou seja, o datalist funciona como um repetidor de controles inseridos dentro
dele.
O resultado aps configurarmos os templates de rodap e cabealho seria:
Nos templates acima foram escolhidos as colunas de nome e sobrenome para serem origem de
dados das caixas de texto.
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 30 de 41
Alem da escolha da fonte de dados e da formatao padro podemos escolher o que ser mostrado
em cada uma das diferentes formas de visualizao dos dados, incluindo em caso de edio dos
dados. No caso de utilizar o modo Edit temos acesso aos botes Update e Cancel que permitem
a programao do cdigo que ir efetivar alteraes. O mesmo ir ser possvel configurar no modo
de Insert.
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 31 de 41
O auto format da grade de dados mostra a tela com os modelos grficos mais comuns:
Ao termos informado a origem de dados, automaticamente a grade recebe as colunas da tabela
utilizada, mas podemos customizar com o construtor clicando sobre o link Edit Columns onde
podemos escolher as colunas incluindo colunas do tipo HyperLink onde podemos utilizar uma
mscara de formatao para que um redirecionamento ocorra, como o exemplo abaixo:
Note que para customizarmos a coluna deve desligar a opo criar colunas automaticamente, ou
as colunas selecionadas iro ficar duplicadas.
6.3.1 Utilizando Link no Grid
Uma necessidade comum ao se utilizar um grid selecionar uma determinada linha e editar seus
dados. Para isso podemos utilizar os botes do grid ou hyperlink.
Primeiro vamos ver como utilizar um hyperlink e como fazer por get a resposta ao valor clicado no
grid.
Crie uma nova coluna e utilize a opo hyperlink como fonte e configure a coluna de hyperlink com o
texto desejado, a coluna de dados que ser utilizada no link e a formatao do texto, conforme a
figura abaixo demonstra:
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 32 de 41
Note que o hyperlink gerado ir chamar a pgina Detalhes e ir passar como varivel, ou parmetro,
o cdigo do histrico. Veja que no foi necessrio incluir nenhum cdigo programtico para este
modelo funcionar, sendo simples e funcional.
O resultado do grid com o hyperlink pode ser visto abaixo:
Na pgina Detalhes ser necessrio receber o valor e criar um dataadapter, como o exemplo a
seguir do load desta pagina:
private void Page_Load(object sender, System.EventArgs e)
{
sqlDataAdapter1.SelectCommand.CommandText += " Where AU_ID='" + Request["Author"].ToString() + "'";
sqlDataAdapter1.Fill(dataSet11);
TextBox1.DataBind();
TextBox2.DataBind();
}
Veja que utilizamos o parmetro enviado pelo grid para alterar o comando select para que este traga
apenas o autor desejado, conforme o cdigo recebido.
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 33 de 41
Note que alem da auto formatao no h muitas opes exceto a Edit Fields para escolher as
colunas desejadas. O restante das configuraes feita na janela de propriedades com a
possibilidade de escolher os botes para programao dos cdigos necessrios a manipular os
dados. Para isso mude a janela de propriedades para o modo eventos e notar que os eventos para
cada uma das operaes desejadas estar disponvel para programao.
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 34 de 41
Note que a extenso deste tipo de objeto ascx, e seu cdigo html no contem as tags de
cabealhos e corpo, uma vez que ser colocado dentro de outras pginas e estas tags no podem
se repetir:
<%@ Control Language="c#" AutoEventWireup="false" Codebehind="Cabecalho.ascx.cs"
Inherits="WebApplication1.Cabecalho" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
<TABLE id="Table1" cellSpacing="1" cellPadding="1" width="100%" border="1">
<TR>
<TD width="33%">
<asp:Label id="lblUsuario" runat="server"></asp:Label></TD>
<TD width="33%">
<asp:Label id="lblDataHora" runat="server"></asp:Label></TD>
<TD width="34%">
<asp:Label id="lblPagina" runat="server"></asp:Label></TD>
</TR>
</TABLE>
Podemos ver que a diretiva da pgina tambm diferente porque as diretivas vistas anteriormente
eram com page e esta utiliza control.
Continuando o exemplo, vamos utilizar o controle de cabealho para obrigar o usurio a preencher
seus dados para depois poder utilizar qualquer pgina, para evitar que as pginas sejam chamadas
sem que o usurio tenha passado pelo login:
private void Page_Load(object sender, System.EventArgs e)
{
if(Session["Usuario"]==null)
Response.Redirect("login.aspx");
else
{
lblUsuario.Text = Session["Usuario"].ToString();
lblDataHora.Text = DateTime.Now.ToString();
lblPagina.Text = AppDomain.CurrentDomain.RelativeSearchPath.ToString();
}
}
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 35 de 41
Como pode ser visto neste cdigo, se a varivel de sesso estiver vazia porque o usurio ainda
no passou pelo logon, e como este cabealho estar em todas as pginas, resolveremos o
problema de algum tentar utilizar um link direto.
Quando o usurio estiver devidamente identificado, a pgina resultante:
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 36 de 41
8 Segurana de Acesso
A segurana de um site pode ser feita utilizando mtodos prontos do servidor web, no caso da
Microsoft o Internet Information Server (IIS), ou utilizando mtodos programticos.
O mais importante validar o usurio e certificar-se, como fizemos com o user control acima, que
uma pgina no seja chamada sem autenticao.
A autenticao annima exige algum outro mtodo de autenticao programtica, como por
exemplo, manter um banco de dados com usurios e senhas e fazer uma consulta a este banco de
dados para saber se o usurio valido.
Como exemplo podemos imaginar um formulrio com uma caixa de texto, uma caixa de senha e um
boto de acesso, onde o cdigo do boto seria:
private void Button1_Click(object sender, System.EventArgs e)
{
string DML = "Exec Proc_Usuario '";
DML += txtUsuario.Text + "','";
DML += pwdSenha.Text + "'";
sqlDataAdapter1.SelectCommand.CommandText = DML;
sqlDataAdapter1.Fill(dataSet11);
if(dataSet11.Tables["Usuarios"].Rows.Count==0)
return;
else
{
Session["Usuario"] = txtUsuario.Text;
Response.Redirect("listacadastro.aspx");
}
}
Veja que no exemplo acima utilizamos uma stored procedure que recebe como parmetros o nome e
senha e retorna os dados do usurio. Se o numero de linhas retornadas for igual a zero porque os
dados no foram encontrados, e neste caso voltamos a mesma tela.
Se houve retorno positivo guardamos o usurio na sesso para identifica-lo e redirecionamos para a
pgina com o menu ou outra desejada.
Verso: 2.0
www.marcelosincic.com.br
Pgina 37 de 41
Nesta configurao vemos que usurios dos grupos marketing e financeiro tem acesso permitido e
os annimos, representados pelo ?, so bloqueados. Tambm possvel representar todos os
usurios utilizando *.
Neste modelo o procedimento semi-automtico, mas tem a limitao do uso do cookie e em caso
do usurio abrir e fechar o browser a autenticao no solicitado, o que prejudica em casos que
mais de uma senha utilizada na mesma mquina.
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 38 de 41
9 Trace e Debug
O Debug no ASP.NET idntico a debug em aplicaes windows forms, com a nica mudana que
o browser fica aberto a parte para permitir o debug.
Outra limitao muito sria do debug que o servidor IIS onde o site est hospedado fica travado
durante o perodo de debug, o que pararia outros usurios e desenvolvedores enquanto o debug
estiver ativo.
J o recurso de trace muito interessante para verificar dados, e muito simples de ser ligado.
Para ativar o trace habilite a propriedade trace do formulrio e defina em tracemode se deseja
ordenado por ordem de execuo ou por categoria, sendo este ultimo o padro.
Aps ligar o trace e rodar a pgina ver o seguinte resultado:
Request Details
Session Id:
Time of Request:
Request Encoding:
t4isii55pvffzg45ymd5hsfu
23/8/2004 16:07:33
Unicode (UTF-8)
Request Type:
Status Code:
Response Encoding:
GET
200
Unicode (UTF-8)
Trace Information
Category
aspx.page
aspx.page
aspx.page
aspx.page
aspx.page
aspx.page
aspx.page
aspx.page
Message
Begin Init
End Init
Begin PreRender
End PreRender
Begin SaveViewState
End SaveViewState
Begin Render
End Render
From First(s)
From Last(s)
0,010611
0,032066
0,032124
0,037154
0,048466
0,048564
0,175022
0,010611
0,021454
0,000059
0,005030
0,011311
0,000098
0,126458
Control Tree
Render Size Bytes (including children)
__PAGE
ASP.login_aspx
1601
_ctl0
System.Web.UI.ResourceBasedLiteralControl588
Form1
System.Web.UI.HtmlControls.HtmlForm
959
_ctl1
System.Web.UI.ResourceBasedLiteralControl339
txtUsuario System.Web.UI.WebControls.TextBox
55
_ctl2
System.Web.UI.LiteralControl
113
pwdSenhaSystem.Web.UI.WebControls.TextBox
55
_ctl3
System.Web.UI.LiteralControl
113
btnLogin System.Web.UI.WebControls.Button
68
_ctl4
System.Web.UI.LiteralControl
42
_ctl5
System.Web.UI.LiteralControl
54
Control Id
Type
Session state
Session Key
HoraLogon
System.DateTime
Type
23/8/2004 16:07:34
Value
Application State
Application Key
Contador
Type
System.Int32
Value
2
Cookies Collection
ASP.NET_SessionId
Name
t4isii55pvffzg45ymd5hsfu
Value
42
Size
Headers Collection
Name
Connection
Accept
Accept-Encoding
Accept-Language
www.marcelosincic.com.br
Keep-Alive
*/*
gzip, deflate
pt-br
Value
Verso: 2.0
www.marcelosincic.com.br
Cookie
Host
User-Agent
Pgina 39 de 41
ASP.NET_SessionId=t4isii55pvffzg45ymd5hsfu
Localhost
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2; .NET CLR 1.1.4322)
Server Variables
Name
ALL_HTTP
ALL_RAW
Value
HTTP_CONNECTION:Keep-Alive HTTP_ACCEPT:*/* HTTP_ACCEPT_ENCODING:gzip, deflate
HTTP_ACCEPT_LANGUAGE:pt-br HTTP_COOKIE:ASP.NET_SessionId=t4isii55pvffzg45ymd5hsfu
HTTP_HOST:localhost HTTP_USER_AGENT:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;
MyIE2; .NET CLR 1.1.4322)
Connection: Keep-Alive Accept: */* Accept-Encoding: gzip, deflate Accept-Language: pt-br Cookie:
ASP.NET_SessionId=t4isii55pvffzg45ymd5hsfu Host: localhost User-Agent: Mozilla/4.0 (compatible;
MSIE 6.0; Windows NT 5.1; MyIE2; .NET CLR 1.1.4322)
/LM/w3svc/1/root/WebApplication1
c:\inetpub\wwwroot\WebApplication1\
APPL_MD_PATH
APPL_PHYSICAL_PATH
AUTH_TYPE
AUTH_USER
AUTH_PASSWORD
LOGON_USER
REMOTE_USER
CERT_COOKIE
CERT_FLAGS
CERT_ISSUER
CERT_KEYSIZE
CERT_SECRETKEYSIZE
CERT_SERIALNUMBER
CERT_SERVER_ISSUER
CERT_SERVER_SUBJECT
CERT_SUBJECT
CONTENT_LENGTH
0
CONTENT_TYPE
GATEWAY_INTERFACE
CGI/1.1
HTTPS
off
HTTPS_KEYSIZE
HTTPS_SECRETKEYSIZE
HTTPS_SERVER_ISSUER
HTTPS_SERVER_SUBJECT
INSTANCE_ID
1
INSTANCE_META_PATH
/LM/W3SVC/1
LOCAL_ADDR
127.0.0.1
PATH_INFO
/WebApplication1/login.aspx
PATH_TRANSLATED
c:\inetpub\wwwroot\WebApplication1\login.aspx
QUERY_STRING
REMOTE_ADDR
127.0.0.1
REMOTE_HOST
127.0.0.1
REMOTE_PORT
1862
REQUEST_METHOD
GET
SCRIPT_NAME
/WebApplication1/login.aspx
SERVER_NAME
localhost
SERVER_PORT
80
SERVER_PORT_SECURE 0
SERVER_PROTOCOL
HTTP/1.1
SERVER_SOFTWARE
Microsoft-IIS/5.1
URL
/WebApplication1/login.aspx
HTTP_CONNECTION
Keep-Alive
HTTP_ACCEPT
*/*
HTTP_ACCEPT_ENCODING gzip, deflate
HTTP_ACCEPT_LANGUAGEpt-br
HTTP_COOKIE
ASP.NET_SessionId=t4isii55pvffzg45ymd5hsfu
HTTP_HOST
Localhost
HTTP_USER_AGENT
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2; .NET CLR 1.1.4322)
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 40 de 41
Veja nos retornos que podemos ler a situao da pgina, como os dados foram enviados, quais
dados esto na sesso, etc.
Um importante dado est na sesso Control Tree onde podemos ler o tempo acumulado e o tempo
individual de cada mtodo, encontrando os mtodos que causaram mais impacto de performance.
Nesta configurao o trace fica na prpria pgina e com true ser criada a pgina trace.axd.
www.marcelosincic.com.br
Verso: 2.0
www.marcelosincic.com.br
Pgina 41 de 41
10 Distribuio
Para distribuir uma aplicao em ASP.NET basta copiarmos os arquivos a seguir:
Tipo ou Nome
Funo
Extenso aspx
Pginas com os cdigos html
Extenso ascx
Pginas com cdigos html dos user controls
Extenso dll
Code Behind das pginas, cada projeto gera um
web.config
Configuraes da aplicao e segurana
Destino
raiz
raiz
raiz\bin
raiz
Quando copiamos os arquivos o framework sempre procura a classe da pgina no diretrio bin de
onde ela est. Ou seja, podemos desenvolver um sistema usando quatro projetos mas utilizando um
nico site na distribuio, bastando copiar as quatro dll no diretrio bin do site e o restante todos
juntos na raiz do site.
Ainda para funcionar, aps criar o diretrio do site necessrio habilitar a aplicao no IIS, bastando
clicar no boto abaixo do IIS Manager:
Ao clicar no boto Configurao pode-se mudar algumas caractersticas do site, como por exemplo,
o tempo de timeout padro da sesso.
Tambm nestas configuraes podemos na aba Erros Personalizados mudar as pginas padro de
erro para tornar amigvel e personalizado com logo da empresa os erros que podem ocorrer, como
por exemplo, de pgina no encontrada.
www.marcelosincic.com.br