Escolar Documentos
Profissional Documentos
Cultura Documentos
Contedo
Unidade 1: Introduo A PLATAFORMA .NET ............................................................. 5 Introduo ................................................................................................................. 5 Dificuldades encontradas no desenvolvimento de sistemas para Windows antes do .NET .......................................................................................................................... 7 A abordagem .NET.................................................................................................. 10 Unidade 2 A Arquitetura .NET..................................................................................... 11 CLR (Commom Language Runtime) ....................................................................... 11 CTS (Common Type System) ................................................................................. 11 CLS (Common Language Specification).................................................................. 12 BCL (Base Classe Library) ...................................................................................... 12 Unidade 3 Viso Geral do ASP .NET .......................................................................... 15 Interao Cliente Servidor ....................................................................................... 15 O que o ASP.NET ................................................................................................ 16 Componentes de uma aplicao ASP.NET ............................................................. 18 Modelo de Compilao e Execuo Dinmica......................................................... 19 Primeira Execuo............................................................................................... 19 Segunda Execuo.............................................................................................. 20 Precompilao ..................................................................................................... 20 ASP.NET AJAX ....................................................................................................... 20 Unidade 4 Criando uma Aplicao Web com o .NET .................................................. 21 O Visual Studio ....................................................................................................... 21 Principais Caractersticas do Visual Studio ............................................................. 21 Templates de Projetos ............................................................................................ 21 Solues e Projetos ................................................................................................ 21 Tela inicial do Visual Studio 2008 ............................................................................ 22 Criando uma Aplicao Web o Visual Studio........................................................... 22 Unidade 5 Criando um Formulrio ASP.NET .............................................................. 25 Adicionando um novo Web Form ASP.NET ............................................................ 25 Unidade 6 Adicionando Cdigo a um Formulrio ASP.NET ........................................ 32 Trabalhando com arquivos Code-Behind ................................................................ 32 Manipuladores de Eventos ...................................................................................... 32 Adicionando Cdigo a um Formulrio...................................................................... 32 Unidade 7 Depurando Aplicaes ASP.NET ............................................................... 37 2
Erros de Sintaxe (Syntax Errors) ............................................................................. 37 Erros em tempo de execuo (runtime)................................................................... 37 Erros de Semntica ................................................................................................. 37 A Classe Debug ...................................................................................................... 38 Habilitando a Depurao ......................................................................................... 38 Adicionando BreakPoints ........................................................................................ 38 Executando a Aplicao em Modo de Depurao ................................................... 39 Execuo Passo a Passo ........................................................................................ 39 Usando a Janela de Depurao .............................................................................. 40 Exibindo a Janela Window ...................................................................................... 40 Depurao Remota ................................................................................................. 40 Tracing .................................................................................................................... 40 Classe TraceContext ............................................................................................... 41 Habilitando o Tracing em uma Aplicao Web ........................................................ 42 Dados do Trace....................................................................................................... 42 Categorias do Trace ................................................................................................ 42 Unidade 8 Validando Entrada de Usurios ................................................................. 44 Controles de Validao ........................................................................................... 44 Caracteres para Expresses Regulares .................................................................. 45 Adicionando Controles de Validao a um Formulrio ............................................ 46 Unidade 9 Master Page e User Controls ..................................................................... 49 Caractersticas da Master Page .............................................................................. 49 Criando uma Master Page....................................................................................... 50 Content Page .......................................................................................................... 50 Caractersticas da Content Page ............................................................................. 50 Criando uma Content Page ..................................................................................... 52 User Controls .......................................................................................................... 53 Caractersticas de um User Control ......................................................................... 53 User Controls e seus Arquivos Associados Code-Behind........................................ 54 Vantagens dos User Controls .................................................................................. 54 Desvantagens dos User Controls ............................................................................ 54 Adicionando um User Control a um Web Form ....................................................... 55 Unidade 10 Acessando Dados com ADO ................................................................... 56 Camada Desconectada ........................................................................................... 56 Camada Conectada ................................................................................................ 56
ADO Object Model .................................................................................................. 56 Camada Desconectada ....................................................................................... 56 Camada Conectada ............................................................................................. 57 Contectando a um Banco de Dados ........................................................................ 58 Criando um Banco de Dados ............................................................................... 58 Criando um Formulrio de Insero de Dados ..................................................... 60 Criando uma Listagem de Dados ......................................................................... 62 Unidade 11 Lendo e Escrevendo Dados XML ............................................................ 65 Criando um Arquivo XML ........................................................................................ 66 Lendo um Arquivo XML ........................................................................................... 66 Unidade 12 Criando um Aplicativo ASP.NET AJAX .................................................... 68 Namespaces ........................................................................................................... 68 Controles ASP.NET AJAX ....................................................................................... 69 Utilizando ASP.NET AJAX ...................................................................................... 69 Unidade 13 Segurana em Aplicaes ASP.NET ....................................................... 72 Autenticao ........................................................................................................... 72 Autorizao ............................................................................................................. 72 Mtodos de Autenticao ASP.NET ........................................................................ 72 Autenticao Windows......................................................................................... 72 Autenticao Baseada em Formulrio ................................................................. 72 SQL Injection........................................................................................................... 75
Introduo
O .NET Framework um componente integral do Windows que oferece suporte criao e execuo da prxima gerao de aplicativos e Servios WEB XML. O .NET Framework foi criado para atender os seguintes objetivos: Fornecer um ambiente de programao orientada a objetos consistente, seja o cdigo objeto armazenado e executado localmente, seja ele executado localmente mas distribudo pela Internet ou seja ele executado remotamente; Fornecer um ambiente da execuo de cdigo que minimiza conflitos de implantao e versionamento de software, muito comum no modelo antigo de componentizao COM/COM+ (conhecido como DLL hell); Fornecer um ambiente da execuo que promova a execuo segura do cdigo, incluindo o cdigo criado por terceiros: desconhecidos ou semiconfiveis; Fornecer um ambiente de execuo que elimina os problemas de desempenho dos ambientes interpretados ou com scripts; Tornar a experincia do desenvolvedor consistente, atravs dos diversos tipos de aplicativos, como aplicativos baseados no Windows e aplicativos baseados na Web. O desenvolvedor pode usar qualquer uma linguagem suportadas pelo .NET para escrever os programas e notar muitas semelhanas ao escrever cdigo para dois ambientes bastante distintos como o desktop e o web, devido camada de abstrao provida pelo .NET; Criar todas as comunicaes nas indstrias padro, para garantir que cdigos baseados no .NET Framework possam se integrar a qualquer outro cdigo. O programador pode reutilizar facilmente cdigo j existente ainda que esteja em outra linguagem, sem que ele precise abrir mo da sua linguagem de preferncia (e.g. o programador pode escrever um programa em C# e utilizar componentes escritos em C#, VB para .NET sem problemas de integrao destes cdigos);
Um servio Web XML, ou simplesmente Web Service como o chamaremos de aqui em diante por simplicidade e coerncia com a linguagem da indstria de software, transcende ao que ns conhecemos como pginas dinmicas, as quais podem ser acessadas a partir de um browser. A idia central de um Web Service consiste em permitir que as aplicaes, sejam elas da Web ou Desktop, ou ainda middleware, se
comuniquem e troquem dados de forma simples e transparente, independente do sistema operacional ou da linguagem de programao.
Para tal fim, no preciso apenas uma plataforma para desenvolvimento Web como o ASP ou CGI, ou ento, um modelo de objetos (COM/COM+) para criar componentes de software reusveis. A idia de um Web Service oferecer uma soluo uniforme, independente do cliente que estiver solicitando um servio qualquer: uma pgina dinmica (ASP, CGI, JSP), um cliente gordo no desktop, ou simplesmente um programa qualquer de terceiros que requeira o servio, um celular, um handheld, no importa. O que interessa que todos os clientes possam usufruir do mesmo servio. Vamos tentar entender o que descrevemos aqui atravs da Figura 1.1.
Por tudo exposto acima, uma plataforma de desenvolvimento completa, que envolve linguagens de programao, compiladores, modelo de objetos etc., se torna necessria para que se consiga englobar de uma forma completamente integrada todos esses requisitos. E essa a proposta de .NET. A linguagem C# (pronuncia-se C Sharp) faz parte desse conjunto de ferramentas oferecidas na plataforma .NET e surge como uma linguagem simples, robusta, orientada a objetos, fortemente tipada e altamente escalvel a fim de permitir que uma mesma aplicao possa ser executada em diversos dispositivos de hardware, independentemente destes serem PCs, handhelds ou qualquer outro dispositivo mvel. Alm do mais, a linguagem C# tambm tem como objetivo permitir o desenvolvimento de qualquer tipo de aplicao: Web service, aplicao Windows convencional, aplicaes para serem executadas num palmtop ou handheld, aplicaes para Internet etc.
Junto linguagem C# encontramos outras linguagens paralelas da prpria Microsoft e que tm tambm a finalidade de dar suporte ao desenvolvimento de sistemas para a plataforma .NET; dentre elas podemos citar: VB e C++.
Neste mdulo, apresentaremos a arquitetura da plataforma .NET a fim de que possa entender onde C# se encaixa nesta plataforma e por que, a despeito da existncia de outras linguagens, inclusive aquelas que tambm do suporte a .NET, C# to importante.
Complexidade associada a linguagens de programao de difcil sintaxe, e ainda as dores de cabea provocadas pelo gerenciamento da memria heap por parte do programador. Pouca integrao e reaproveitamento de cdigo entre linguagens de programao diferentes; ausncia de implementao de mecanismo de herana entre linguagens diferentes. Diversidade com pouca integrao na resoluo de problemas complexos, dificultando a compreenso e o desenvolvimento dos sistemas. Falta de portabilidade de cdigo executvel entre plataformas diferentes.
Apenas para ilustrar um pouco a situao atual, vamos apresentar um pequeno estudo de caso. Para simplificar o nosso problema, vamos considerar apenas as solues Microsoft. Imaginemos uma situao hipottica na qual solicitada uma soluo de home banking que aceite requisies de um browser da Internet ou qualquer outro dispositivo como handheld, telefone celular etc.; vejamos qual seria a resposta imediata dos recursos de software que eu iria precisar:
1. Uma linguagem de programao para desenvolver as pginas dinmicas: de cara, VBScript ou JScript. 2. Precisamos desenvolver alguns objetos COM ou COM+ no servidor, mas por questes de performance e poder de linguagem, escolhemos a linguagem C++, e claro, o compilador C++ do MS Visual Studio. 3. Vamos precisar de alguns componentes para executar no MS Queue server ou ento no MS transaction server, e escolhemos a linguagem Visual Basic porque temos pessoal que j fez esse tipo de trabalho usando VB. 4. Bem, vamos falar o bvio, mas precisamos tambm de Web designers com domnio de HTML, Flash, ferramentas de editorao grfica etc. 5. Ainda temos um problema para resolver, que o fato de termos clientes heterogneos que no conseguem ler um formato padro como uma Web page em HTML.
Ok, agora o momento de correr atrs do pessoal com todas essas competncias, tentar gerenciar essa salada de tecnologias e linguagens de programao e, de quebra, fazer funcionar tudo direitinho.
E esta era uma situao bem comum no desenvolvimento de software at pouco tempo atrs: ter de costurar uma srie de linguagens + ferramentas + tecnologias + modelos de objetos + linguagens de script vs. linguagens de programao completas + linguagens de marcao.
Usando o .NET podemos proporcionar uma soluo alternativa, de menor complexidade de implementao, mais integrada: 1. Uma linguagem de programao para desenvolver as pginas dinmicas no servidor Web: C# usando o Visual Studio. 2. Uma linguagem de programao para desenvolver objetos reusveis, armazenados em uma DLL no servidor: C# usando o Visual Studio. 3. Uma linguagem de marcao malevel o suficiente de sorte que permita mostrar o contedo em diversos dispositivos: XML, gerado pelo C# ou pr-montado para alguns casos. 4. Todo o trabalho de formatao e transformao dos documentos XML gerados pela soluo de homebank ser feito usando XSL para gerar a linguagem de marcao suportada no lado cliente. Ah! Com que linguagem vamos fazer estas transformaes? Com C# claro!
Mas os nossos desenvolvedores tm um background muito forte em VB, de forma que ns descartamos o C# como alternativa. No tem problema, tudo o que foi dito acima continua vlido, vamos mudar apenas a linguagem de C# para VB. A plataforma .NET permite que usemos a linguagem de programao da qual mais temos domnio e mesmo assim continuamos a usufruir todo o seu potencial.
O exemplo anterior foi apenas para ilustrar o contexto atual de desenvolvimento de sistemas complexos, onde temos de realmente fazer uma ginstica muito grande integrar todas as partes constituintes da nossa soluo. A boa notcia que, como mostramos no exemplo, com .NET esta situao est, digamos assim, findando esse problema, porque, como voc pode ter percebido, a sua soluo caiu de trs linguagens de programao para apenas uma, e o resto das tecnologias que usamos (COM+, por exemplo) se integra perfeitamente com o restante da soluo. Apenas falando no quesito da clareza e reutilizao de cdigo, algumas bibliotecas de classes, como MFC (Microsoft Foundation Class), surgem nesse nterim, mas tm como foco a linguagem C/C++ e no podem ser usadas a partir do Power Builder, por 9
exemplo, ou ento Delphi, que tem a sua prpria biblioteca de componentes reutilizveis. O que equivale a dizer que essas bibliotecas no podem ser usadas a partir de qualquer linguagem de programao, o que torna o reaproveitamento de cdigo ainda mais difcil.
Mesmo tecnologias como COM e CORBA sempre apresentam os mesmos problemas de dificuldade de aprendizado por causa de sua complexidade; ou ento, mesmo quando oferecem um modelo de objetos comum a ser usado por outras linguagens que no VB ou C++,acabam esbarrando no fato de que cada linguagem de programao implementa os tipos de uma forma diferente. E finalmente, quando achamos que conseguimos resolver os problemas dos tipos, somos barrados porque no conseguimos programar relaes de herana entre linguagens diferentes.
Paralelamente s iniciativas da Microsoft, em 1995 surge a linguagem JAVA (na verdade, mais que uma linguagem, uma plataforma de desenvolvimento) e, apesar de oferecer h mais de dez anos a proposta de portabilidade de cdigo executvel, (leia-se, compile uma vez e rode em qualquer plataforma), JAVA-cntrica, o que obriga o programador a aprender uma nova linguagem se realmente quiser usufruir os recursos que ela oferece. Mas voc pode perguntar: e .NET no nos obriga a aprender C#? A resposta no e saberemos mais adiante como isso feito.
A abordagem .NET
Citaremos a seguir algumas das caractersticas de .NET que visam a resolver os problemas citados acima: Independncia de linguagem de programao: o que permite a implementao do mecanismo de herana, controle de excees e depurao entre linguagens de programao diferentes. Reutilizao de cdigo legado: o que implica em reaproveitamento de cdigo escrito usando outras tecnologias como COM, COM+,ATL, DLLs e outras bibliotecas existentes. Tempo de execuo compartilhado: o runtime de .NET compartilhado entre as diversas linguagens que a suportam, o que quer dizer que no existe um runtime diferente para cada linguagem que implementa .NET. Sistemas auto-explicativos e controle de verses: cada pea de cdigo .NET contm em si mesma a informao necessria e suficiente de forma que o runtime no precise procurar no registro do Windows mais informaes sobre o programa que est sendo executado. O runtime encontra essas informaes no prprio sistema em questo e sabe qual a verso a ser executada, sem acusar aqueles velhos conflitos de incompatibilidade ao registrar DLLs no Windows. Simplicidade na resoluo de problemas complexos.
10
Para melhor entendermos tudo o que temos dito at aqui, vamos falar um pouco da arquitetura de .NET e os seus principais componentes.
12
13
14
O ASP.NET um framework que possibilita aos programadores a construo de Web sites dinmicos, aplicaes Web, e servios XML. O componente principal do ASP.NET o ASP.NET Web Form, que fornece uma maneira fcil e rpida de construir web sites e aplicaes web. O ASP.NET tambm inclui tecnologia para construo de XML Web Services, que so a base da construo de aplicaes Web distribudas.
15
No lado do cliente, aps carregar a pgina, voc pode submeter a pgina de volta ao servidor, disparando o que chamamos de postback. Isso acontece utilizando funcionalidades do protocolo HTTP, tipicamente os mtodos POST e GET. Em um HTML normal, a submisso de formulrios pode ser acionada a partir de um boto do tipo submit na pgina, e utilizar cdigo client-side para trabalhar a informao antes de ser enviada ao servidor ou mesmo para acionar um evento de postback. No ASP.NET a interao cliente-servidor transparente por usar programao orientada a eventos sobre o protocolo HTTP.
O que o ASP.NET
O ASP.NET um conjunto de tecnologias para desenvolvimento WEB que possibilita as programadores, construir Web Site, Aplicaes Web e Web Services XML. Pelo fato de o ASP.NET ser parte do Framework .NET, voc pode desenvolver aplicaes web em qualquer uma das linguagens .NET. O principal componente do ASP.NET o Web Form. Uma aplicao ASP.NET tpica, consiste de um ou mais Web Form. Um Web Form uma pgina que o usurio visualiza em seu browser, e tambm uma pgina dinmica que processada no servidor e pode acessar recursos do mesmo. Mas tambm pode ser utilizada para interagir com o usurio no navegador utilizando cdigo JavaScript, VBScript ou AJAX. Em outras palavras, uma pgina HTML tradicional pode executar scripts no cliente para executar tarefas bsicas. J uma pgina ASP.NET Web Form pode tambm executar cdigo no lado do servidor para acessar banco de dados, gerar outros Web Forms, ou fazer uso de dispositivos de segurana do servidor.
16
O ASP.NET independente do dispositivo que for usado para acess-lo. Permitindo ao programado desenvolver Web Forms que podero ser vistos em quaisquer dispositivos que tenham um navegador Web. O ASP.NET tambm faz uso do Visual Studio para construir e executar as aplicaes ASP.NET. Isso resulta em um processo de desenvolvimento simplificado que permite a voc testar a aplicao sem precisar criar um ambiente de hospedagem externo. Tambm est embutido no ASP.NET, mtodos de autenticao do tipo Windows ou Forms que auxiliam o programador a manter sua aplicao e dados seguros. Cada aplicao ou site disponibilizado em um servidor Web, roda como um processo dentro do Internet Information Services (IIS). O ASP.NET tambm um ambiente de desenvolvimento Web que inclui funcionalidades para voc desenvolver aplicaes Web com o mnimo de codificao, em qualquer linguagem compatvel com a CLR, incluindo Microsoft Visual Basic, C#, Microsoft JScript .NET, e J#. A seguinte tabela descreve as diversas caractersticas do ASP.NET:
Compilador ASP.NET
Segurana
Descrio O ASP.NET permite voc encapsular funcionalidades comuns da interface em controles reusveis de fcil utilizao. Tambm fornece a possibilidade de controle de aparncia do seu web site utilizando temas. Adicionalmente ao temas, voc pode fazer uso de Master Pages, para a criao de layout consistente de pginas em sua aplicao. Todo cdigo ASP.NET compilado, e fornece tipagem forte de dados, otimizao de performance, entre outros benefcios. Depois que o cdigo compilado, o componente CLR compila o cdigo ASP.NET para cdigo nativo, aumentando ainda mais sua performance. O ASP.NET fornece uma infra estrutura avanada de segurana de autenticao de usurios, alm de outras tarefas relacionadas a segurana. Voc pode autorizar usurios utilizando autenticao Windows, que fornecida pelo IIS, e alternativamente voc mesmo pode gerenciar a autenticao usando seu prprio banco de dados atravs de formulrios de autenticao ASP.NET. O ASP.NET sempre executado utilizando uma identidade do Windows, portanto, voc pode deixar sua aplicao segura utilizando as caractersticas do prprio Windows, como listas de controle de acesso NTFS (ACLs) e permisses de banco de
17
State-Management Facilities
ASP.NET Configuration
Debugging Suport
dados. O ASP.NET fornece um gerenciador de estado que permite voc armazenar informaes entre as requisies de pgina, como dados do cliente ou contedo de um carrinho de compras. Aplicaes ASP.NET usam um sistema de configurao que permite voc definir parmetros para seu servidor Web, site, ou aplicaes individuais. Voc pode fazer ajustes de configurao no momento em que suas aplicaes so disponibilizadas no servidor ou a qualquer momento com um mnimo de impacto operacional em sua aplicao e servidores. O ASP.NET inclu funcionalidades que permitem voc monitorar o estado e performance da sua aplicao. Permite a voc monitorar eventos chave que fornece a voc dados sobre erros e condies da sua aplicao. O ASP.NET tema vantagem de uma estrutura de depurao em tempo de execuo que d suporte a depurao cross-language e cross-computer. Voc pode depurar tanto objetos gerenciados como no gerenciados, e todas as linguagens suportadas pela CLR. E o ASP.NET tambm fornece um modo de rastreamento (trace mode) que permite a voc adicionar informaes operacionais a cada pgina da sua aplicao. O ASP.NET da suporte a XML Web Services. Um XML Web Service um componente que contm dados e permite as aplicaes trocar informao atravs de firewalls utilizando padres web como HTTP e mensagens XML. O ASP.NET inclui um ambiente extensvel de gerenciamento do ciclo de vida de uma aplicao do momento em que o usurio acessa pela primeira vez um determinado recurso, como uma pgina, at o momento em que o aplicativo fechado. ASP.NET inclu suporte para designers de criao de Web Server controls para uso com as ferramentas visuais como o Visual Studio.
18
Web Forms e pginas .aspx. Os Web Forms fornecem a Interface do Usurio para as aplicaes Web. User Controls, ou controles .ascx. Os User Controls fornecem a UI para funcionalidades especficas a serem reutilizadas em Web Forms diferentes. Arquivos Code-behind. O arquivo code-behind um arquivo associado ao Web Form que contm o cdigo Server-side para o mesmo. Voc tambm pode optar por criar uma pgina ASP.NET em nico arquivo que contenha o HTML e o cdigo fonte .NET no mesmo arquivo. Arquivos de configurao. So arquivos XML que definem a configurao da aplicao Web no servidor. Cada aplicao Web pode ter um ou mais arquivos. J cada servidor Web, pode ter somente um arquivo machine.config. Global.asax. O arquivo Global.asax contm cdigo para responder eventos a nvel de aplicao que so acionados pelo ASP.NET, como erros no tratados na aplicao. XML Web Service. Permitem a aplicao enviar e receber dados de um XML Web Service. Conexes a Banco de Dados. Permitem a aplicao Web transferir dados de fontes de dados. Itens Adicionais. Arquivos adicionais que voc inclui na aplicao Web como arquivos HTML para contedo esttico, arquivos texto, arquivos XML, arquivos XSLT. CSS. Arquivos que contm folhas de estilo utilizadas no design da aplicao.
Primeira Execuo 1. O Cliente realiza uma requisio HTTP Get para o servidor 19
2. O parser do ASP.NET interpreta o cdigo fonte 3. Se o cdigo no estiver compilado em uma DLL, o ASP.NET invoca o compilador. 4. O Runtime carrega e executa o cdigo MSIL que executado pelo run time. Nota: o cdigo MSIL o cdigo em linguagem assembly executado em tempo de execuo. Os vrios compiladores das linguagens .NET como Visual Basic e C#, compilam seus cdigos em MSIL, que ento executado pelo runtime.
Segunda Execuo Quando o usurio solicita a mesma pgina pela segunda vez, os seguintes eventos acontecem: 1. O cliente faz uma requisio GET HTTP para o servidor. 2. O runtime imediatamente carrega e executa o cdigo MSIL que j est compilado pela primeira requisio da pgina. Nota: a recompilao da pgina .aspx pode ocorrer, principalmente se o contedo da mesma foi alterado.
Precompilao Voc pode escolher pr compilar o seu site antes de disponibiliz-lo aos seus usurios. As vantagens da precompilao incluem: Resposta otimizada aos usurios, pois as pginas no precisam se compiladas na primeira execuo das mesmas. Identifica erros de compilao antes de os usurios acessarem o site pela primeira vez. Possibilidade de disponibilizar o site na Web em um servidor de produo sem o cdigo fonte.
ASP.NET AJAX
O ASP.NET tambm disponibiliza um framework livre Microsoft AJAX para ser utilizado em aplicaes interativas. O ASP.NET AJAX permite enviar de forma assncrona uma seo ou parte de uma pgina web ao servidor, e receber uma resposta de forma a no distrair o usurio ou mesmo interromper o que ele estava fazendo na pgina. O ASP.NET AJAX pode ser usado em conjunto com cdigo serverside que automaticamente geram cdigo client-side JavaScript. O ASP.NET AJAX tambm disponibiliza o AJAX Control Toolkit, que uma coleo de controles clientside interativos, juntamente com a biblioteca jQuery.
20
O Visual Studio
O Visual Studio o ncleo do desenvolvimento do Microsoft .NET. um ambiente completo de desenvolvimento em que voc pode desenhar, desenvolver, depurar aplicaes .NET e Web Services XML.
Templates de Projetos
O Visual Studio fornece templates para a criao de um grande nmero de tipos projetos. Esses templates contem todos os arquivos necessrios e lhe garantem que a IDE est corretamente configurada para o projeto selecionado. Quando voc utiliza esses templates, voc no tem que configurar a infraestrutura necessria de pastas e arquivos que um determinado tipo de projeto necessitem. Isso lhe permite o manter foco no seu projeto e na incluso de funes ao mesmo.
Solues e Projetos
Alguns Templates que o Visual Studio disponibiliza: 21
ASP.NET Web Application ASP.NET Web Site ASP.NET Web Service application
Descrio Cria classes e componentes reusves que voc pode compartilhar com outros projetos. Cria um aplicativo web com os arquivos bsicos para sua aplicao. Cria um ASP.NET Web site. Cria um XML Web service que poder ser consumido por outros web services ou aplicaes em uma rede. XML Web Services so componentes disponves na Internet projetados para interagir com outras aplicaes. Cria componenetes ASP.NET AJAX customizados. Para voc criar o seu projeto customizado. Esse template cria uma estrutura mnima para voc armazenar sua aplicao. Voc deve manualmente inserir todas referncias, arquivos e componentes que necessitar. Cria um web site com a estrutura mnima necessrio para um Web site com suporte a Dynamic Data.
22
Abrir a seguinte janela onde selecionamos o Template de Web Site que ser usado:
Selecione o template ASP.NET Web Site, informando a pasta e o nome do site a ser criado em Location (WebSite1), e selecionando a linguagem de programao que ser utilizada no projeto Visual C#.
23
Um novo projeto criado, e exibido automaticamente o cdigo da pgina aspx. No lado esquerdo temos as abas Toolbox, CSS Properties, e Manage Styles. Na lateral direita temos as abas Server Explorer e Properties. Na barra inferior temos os botes Design, Split e Source que Server para alternar a visualizao da rea central entre Design, modo de desenho, Source, exibe o cdigo fonte HTML da pgina, e Split que mostra ambos dividindo a tela horizontalmente ao meio. Ao clicar no menu View > Server Explorer e ser exibida no lado direito da janela do Visual Studio, a estrutura de arquivos do nosso site, automaticamente gerada pelo Visual Studio:
24
Nessa unidade criaremos um Web Form ASP.NET para gerar um formulrio de envio de Curriculum Vitae. Esse formulrio ter os campos Nome Endereo Telefone Email E um campo texto para o currculum
Exibir a seguinte janela para seleo do tipo de Template a ser inserido no Web Site:
25
Selecione o template Web Form, atualize seu nome para Curriculum.aspx, Language Visual C#, e certifique-se de que a opo Place code in separate file encontra-se marcada. Para concluir, clique no boto Add. Observe que no Solution Explorer, aparecer o Web Form includo no site.
Ainda no Solution Explorer, d um duplo clique sobre o Curriculum.aspx, abrir a aba Curriculum.aspx com o cdigo fonte do formulrio:
Dentro dessa aba est o cdigo ASP.NET para criao da pgina Web. Repare que muitas das TAGs que esto nesse cdigo so TAGs HTML normais. dentro desse cdigo que criaremos o nosso formulrio de entrada de currculos. Vamos comear adicionando os controles que iro compor o formulrio na pgina. Para tanto abra a aba Toolbox esquerda do cdigo:
26
Nela aparecem listados todos controles ASP.NET disponveis para o nosso formulrio.
Arraste o controle Label para dentro da janela de cdigo do Web Form Curriculum.aspx, entre as TAGS <div>, dever ficar da seguinte forma:
<form id="form1" runat="server"> <div> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> </div> </form>
Precisamos alterar o valor das propriedades ID e Text para melhor estruturar o cdigo e identificar os componentes. Aproveitaremos tambm para inserir algumas TAGs br que serviro para melhorar o layout do formulrio e adicionar a propriedade Width=500px na tag asp:TextBox. No cdigo abaixo, em negrito esto os contedos alterados:
<form id="form1" runat="server"> <div> <asp:Label ID="lblNome" runat="server" Text="Nome:"></asp:Label> <br /> <asp:TextBox ID="txtNome" Width="500px" runat="server"></asp:TextBox> <br /> </div> </form>
Voc pode tambm alternar para o modo Design para ver como sua pgina web est ficando, clicando no boto Design, logo abaixo da janela de cdigo:
27
possvel tambm adicionarmos os controles diretamente no modo de design, clicando neles na Toolbox e arrastando eles para dentro do design. E posteriormente alterarmos suas propriedades clicando neles e acessando a aba Properties, ou pelo menu View > Properties Window, que exibir as propriedades do elemento selecionado.
Acionaremos, agora os campos que faltam. Para os campos endereo, telefone e email adicionando outros 3 Labels e TextBoxes, e para o campo curriculum vamos nos modificar tambm das propriedades Columns="50", Rows="25"e TextMode="MultiLine"
28
<form id="form1" runat="server"> <div> <asp:Label ID="lblNome" runat="server" Text="Nome:"></asp:Label> <br /> <asp:TextBox ID="txtNome" Width="500px" runat="server"></asp:TextBox> <br /> <asp:Label ID="lblEndereco" runat="server" Text="Endereco:"></asp:Label> <br /> <asp:TextBox ID="txtEndereco" Width="500px" runat="server"></asp:TextBox> <br /> <asp:Label ID="lblTelefone" runat="server" Text="Telefone:"></asp:Label> <br /> <asp:TextBox ID="txtTelefone" Width="500px" runat="server"></asp:TextBox> <br /> <asp:Label ID="lblEMail" runat="server" Text="EMail:"></asp:Label> <br /> <asp:TextBox ID="txtEMail" Width="500px" runat="server"></asp:TextBox> <br /> <asp:Label ID="lblCurriculum" runat="server" Text="Curriculum:"></asp:Label> <br /> <asp:TextBox ID="txtCurriculum" Width="500px" runat="server" Columns="50" Rows="25" TextMode="MultiLine"></asp:TextBox> <br /> </div> </form>
E por ltimo, adicionaremos o boto para enviar o formulrio de envio arrastando um controle Button para o final do formulrio, alterando a propriedade ID para btnOk e a propriedade Value para Enviar Curriculum:
<form id="form1" runat="server"> <div> <asp:Label ID="lblNome" runat="server" Text="Nome:"></asp:Label> <br /> <asp:TextBox ID="txtNome" Width="500px" runat="server"></asp:TextBox> <br /> <asp:Label ID="lblEndereco" runat="server" Text="Endereco:"></asp:Label> <br /> <asp:TextBox ID="txtEndereco" Width="500px" runat="server"></asp:TextBox> <br /> <asp:Label ID="lblTelefone" runat="server" Text="Telefone:"></asp:Label> <br /> <asp:TextBox ID="txtTelefone" Width="500px" runat="server"></asp:TextBox>
29
<br /> <asp:Label ID="lblEMail" runat="server" Text="EMail:"></asp:Label> <br /> <asp:TextBox ID="txtEMail" Width="500px" runat="server"></asp:TextBox> <br /> <asp:Label ID="lblCurriculum" runat="server" Text="Curriculum:"></asp:Label> <br /> <asp:TextBox ID="txtCurriculum" Width="500px" runat="server" Columns="50" Rows="25" TextMode="MultiLine"></asp:TextBox> <br /> <asp:Button ID="btnOk" runat="server" Text="Enviar Curriculum" /> </div> </form>
Devemos salvar as alteraes feitas no formulrio utilizando a opo File > Save All. Para executar o formulrio e visualizar a pgina compilada apartir do servidor de desenvolvimento do Visual Studio, basta pressionar Control + F5 para execuo direta, ou pressionando F5, ou pressionar o boto de execuo da barra de ferramentas , ou ainda apartir do menu Debug > Start Debugging, opes que iniciam a execuo em modo de depurao que far aparecer a seguinte janela:
30
Basta clicar Ok para seguir. Aps compilar a aplicao e iniciar o servidor o Visual Studio abre o navegador com o formulrio:
31
Manipuladores de Eventos
Quando um usurio interage com um Web Form, um evento disparado. Precisamos desenhar nossa aplicao Web para que execute a tarefa apropriada quando um evento acionado. Um Manipulador de Evento a ao que acontece em resposta ao evento que disparado. Os Web Forms do ASP.NET so orientados a evento. Quando voc clica em um boto submit, um evento gerado. Um evento escrito para esse evento de clicar, ento acionado e pode executar uma tarefa, como salvar os dados em um banco de dados, ou simplesmente redirecionar o usurio para uma pgina diferente.
32
No Solution Explorer, clique duas vezes sobre o arquivo Default.aspx para abri-lo e entre na visualizao do cdigo fonte como abaixo:
Arraste um controle Label para dentro das tags <div> e logo abaixo uma tag <br /> e em seguida um controle do tipo TextBox seguido de outra tag <br />. Altere a propriedade Text do Label para Nome: e a propriedade ID para lblNome, no TextBox altere a propriedade ID para txtNome. Temos nosso primeiro par na tela. Adicione mais 4 pares para Salario Fixo (IDs lblFixo, txtFixo), Total Vendido: (IDs lblVendido, txtVendido), Comissao: (IDs lblComissao, txtComissao), A Receber: (IDs lblReceber, txtReceber). 33
Por ltimo, adicione um controle Button e altere a propriedade ID para btnCalcular e a propriedade Text para Calcular. Dentro da tag <body> seu code de ficar como o abaixo:
<form id="form1" runat="server"> <div> <asp:Label ID="lblNome" runat="server" Text="Nome:"></asp:Label> <br /> <asp:TextBox ID="txtNome" runat="server"></asp:TextBox> <br /> <asp:Label ID="lblFixo" runat="server" Text="Salrio Fixo:"></asp:Label> <br /> <asp:TextBox ID="txtFixo" runat="server"></asp:TextBox> <br /> <asp:Label ID="lblVendido" runat="server" Text="Total Vendido:"></asp:Label> <br /> <asp:TextBox ID="txtVendido" runat="server"></asp:TextBox> <br /> <asp:Label ID="lblComissao" runat="server" Text="Comisso:"></asp:Label> <br /> <asp:TextBox ID="txtComissao" runat="server"></asp:TextBox> <br /> <asp:Label ID="lblReceber" runat="server" Text="A Receber:"></asp:Label> <br /> <asp:TextBox ID="txtReceber" runat="server"></asp:TextBox> <br /> <asp:Button ID="btnCalcular" runat="server" Text="Calcular" /> </div> </form>
34
D um duplo clique sobre o boto calcular, abrir a tela de edio do cdigo desse boto, para o evento click:
Vamos inserir o cdigo C# necessrio para o clculo do valor a ser recebido pelo vendedor. Para isso, vamos pegar os valores que o usurio digitou nos campos, convertendo os mesmos para Double, executando o clculo e colocando o valor no campo resultado:
protected void btnCalcular_Click(object sender, EventArgs e) { double fixo = 0; double vendido = 0; double comissao = 0; double receber = 0; if (txtFixo.Text != "") { fixo = Convert.ToDouble(txtFixo.Text); } if (txtVendido.Text != "") { vendido= Convert.ToDouble(txtVendido.Text); } if (txtComissao.Text != "") { comissao = Convert.ToDouble(txtComissao.Text); } receber = fixo + (vendido * comissao / 100); txtReceber.Text = receber.ToString(); }
35
Salve a sua aplicao e execute ela em Debug > Start Debugging. Preencha os dados do formulrio e teste a aplicao:
36
Quando voc desenvolve aplicaes, voc pode encontrar diversos tipos diferentes de erros. Antes de solucion-los voc tem que identificar o tipo de erro e trat-lo apropriadamente. Existem 3 tipos de erros que voc tem que lidar ao desenvolver um aplicativo: erro de sintaxe, erros de runtime, e erros de semntica.
E esquecer de fechar o par de parnteses ( ) ou chaves { }, um erro de sintaxe ocorre. O Visual Studio alerta voc sobre esses erros indicando no cdigo enquanto voc desenvolve.
Erros de Semntica
So erros mais difceis de localizar pois sua aplicao ir executar e no ser emitido nenhuma notificao. Mesmo assim, sua aplicao no executa a tarefa esperada. Por exemplo, seu programa exibe um formulrio de entrada com os dados de um cliente e so salvos sem erro nenhum. Mas ao visualizar novamente a informao, alguns dados no aparecem corretamente ou no foi salvo. Isso significa que a semntica da aplicao no est correta.
37
A Classe Debug
A classe Debug oferece mtodos e propriedades que podem ajudar voc a depurar seu cdigo exibindo informaese verificando seu cdigo com declaraes no cdigo. Usando a classe Debug, voc tem a garantia de um cdigo robusto sem afetar a performance e tamanho do cdigo do seu produto na release final. Isso por que os cdigos de depurao da classe no so compilados com o programa na verso Release da aplicao. A classe Debug disponvel globalmente na aplicao importando o namespace System.Diagnostics. No h necessidade de instanciar a classe, ela no tem construtores, e voc no pode herdar a mesma pois do tipo sealed. Mtodos da Classe Debug Mtodo Debug.Write Descrio Escreve a string que voc determinar, ou escreve a sada de um mtodo ToString de um objeto . Escreve uma linha de texto de sua escolha, ou escreve a sada do mtodo toString de um Objeto. Para escrever uma string condicionalmente. Para gerar a sada de uma linha de texto formatado. Para exibir uma mensagem se uma determinada condio for falsa.
Debug.WriteLine
Habilitando a Depurao
Voc deve habilitar a depurao caso voc deseje depurar a sua aplicao. Isso feito no arquivo web.config. Dentro do mesmo voc precisa localizar o elemento compilation e alterar o atributo debug para true.
<configuration> <system.web> <compilation debug="true"> ... </system.web> <configuration>
Adicionando BreakPoints
O Visual Studio nos fornece o recurso de BreakPoints, que so nada mais do que pontos de parada da execuo de uma aplicao. Voc pode colocar ou remover em qualquer ponto do seu cdigo C# um Break Point pressionando a tecla F9, ou a partir do menu Debug > Toggle Breakpoint, ou ainda sobre a linha de cdigo clicando o boto direito opo Breakpoint. Ou ainda, clicando sobre a bolinha vermelha que marca o Break Point.
38
39
Depurao Remota
Para voc executar depurao remota, voc deve usar o programa Remote Debugging Monitor ou msvsmon.exe, que uma aplicao qual o Visual Studio se conecta. Por default, o Remote Debugging Monitor roda como uma aplicao Windows, voc pode configur-lo para rodar como servio caso queira que ele seja executado em um servidor remoto. Voc pode executar o assistente a partir do menu Start, pasta Tools. Depois de iniciar o depurador remoto, voc deve configurar os ambientes em ambas as mquinas. Voc tambm deve levar em considerao, as questes de seguranas relacionadas ao acesso remoto.
Tracing
Tracing o processo de receber informao sobre a execuo da aplicao em tempo de execuo. uma maneira de monitorar a sua aplicao. Essa informao pode lhe auxiliar a identificar problemas ou analisar performance, de uma maneira que no afeta a aplicao.Tracing normalmente utilizado em ambiente de produo em que no possvel executar depurao. Voc pode utilizar o tracing para: Ter um diagnstico das informaes de uma requisio a uma pgina ASP.NET Escrever instrues de depurao diretamente no cdigo.
40
Classe TraceContext
a classe usada para escrever mensagens em uma pgina ou no trace log em memria. Mtodos da Classe TraceContext: Write : escreve uma mensagem de trace no log Warn : similar ao mtodo Write, porm as mensagens aparecem em vermelho.
Ambos os mtodos possuem 3 overloads, todos os 3 possuem uma mensagem de tracing, e adicionalmente um nome de categoria, e um parmetro to tipo Exception que indica que voc pode informar um erro capturado ou uma exceo definida pelo usurio. Exemplo:
Trace.Warn("Ateno"); Trace.Write("Mensagem de Trace"); Trace.Write("Categoria", "Mensagem de Trace"); Trace.Write("Categoria", "Mensagem de Trace", new Exception("mensagem da exceo"));
Sada:
O parmetro trace permite voc classificar a sada do Trace por categoria alterando o cdigo:
<%@ Page ... Trace="True" TraceMode="SortByCategory" %>
Alternativamente voc tambm pode utilizar SortByTime. Voc pode utilizar a propriedade IsEnable do TraceContext para alterar o estado do tracing dinamicamente ou verificar seu estado:
// habilitando o tracing no cdigo Trace.isEnabled = true; // verificando seu estado
41
Dados do Trace
As informaes do trace a nvel de pgina so adicionadas ao final da pgina .aspx em que estiver habilitado.
Categorias do Trace
Os dados do Trace so divididos em diversas categorias conforme listado: Categoria Request Details Trace Information Descrio Informao sobre a requisio: identificao da sesso (ID), tempo da requisio, tipo de requisio, e status. Sadas padro e customizadas de trace. A coluna From First(s) contem o tempo total desde a execuo at o trace acontecer, e a coluna From Last(s) mostra o tempo restante. Os tempos aqui so importantes para se ter um perfil e para identificar os mtodos que mais demoram para responder. Lista de todos os itens que esto na pgina, junto com o tamanho de cada uma. uma representao da ASP.NET Control Tree. Mostra cada controle, seu ID nico, tipo, nmeros de 42
Control Tree
Session State Application State Headers Collection Form Collection Querystring Collection Server Variables
bytes que utiliza para ser renderizado, e o nmero de bytes que ocupa na ViewState e ControlState. Informao sobre os valores armazenados na sesso (Session), se houver algum. Informao sobre os valores armazenados na Application, se houver algum. Lista de requisio e header de resposta. Lista de controles e seus valores, do formulrio que foi enviado. Lista de valores passados na URL. Lista de toda as variveis do servidor e seus valores.
43
A validao de entrada de dados utilizada para garantir que o usurio preencha corretamente os campos de um formulrio antes que o mesmo seja enviado para o servidor. A validao de dados em uma pgina internet serve como um filtro antes que a lgica no servidor seja executada. No ASP.NET, a validao de entrada de dados ocorre no lado do servidor, mas tambm pode acontecer no lado do cliente quando o browser der suporte a validao. Se o browser suportar validao de dados e a mesma estiver habilitada, os mecanismos de validao que voc criou acontecero no lado do cliente antes que os dados sejam enviados ao servidor. O usurio recebe imediatamente a mensagem de alerta caso a regra de validao no seja satisfeita. Por questes de segurana, todas as validaes feitas no lado do cliente so tambm executadas no do servidor.
Controles de Validao
O ASP.NET fornece um conjunto de controles de validao que ajudam voc a identificar erros na entrada de dados. So eles: Controle de Validao RequiredFieldValidator Funo Verifica se um determinado campo foi informado em um controle. Esse o nico controle de validao que requer um valor. Todos os demais aceitam um controle vazio como uma resposta vlida. Compara o valor informado para um campo de entrada com outro campo, um valor fixo, um tipo de dado ou arquivo. Por exemplo, voc pode usar esse controle para fazer uma verificao de digitao de senha comparando o valor desse campo com o outro. Verifique se o valor informado respeita um padro definido por uma expresso regular. Esse controle de validao permite voc verificar se o valor de um controle segue uma seqncia previsvel de caracteres como em email, CEP, CPF,
CompareValidator
RegularExpressionValidator
44
RangeValidator
CustomValidator
ValidationSummary
CNPJ. Verifica se um campo se encontra entre dois valores. Por exemplo, voc pode utilizar esse controle para verificar se a idade que o usurio informou se encontra em uma determinada faixa de valores. Permite a voc escrever um cdigo e criar uma expresso de validao personalizada. Por exemplo, voc pode usar esse controle para verificar se um nmero primo, se confere com algum valor em banco de dados, validar os dgitos verificadores de um CNPJ ou CPF. Exibe na pgina um sumrio de todos os erros de validao encontrados. Esse controle normalmente colocado prximo ao boto Submit para informar prontamente o usurio o status dos dados informados.
Obs: se voc no quer que um determinado controle, por exemplo, um boto, acione a validao do formulrio, voc pode ajustar a propriedade CausesValidation do mesmo para false. Isso muito til em um boto de Cancelar, por exemplo.
? * + [0-n] {n} | \ \w \W \d \D \.
45
O exemplo a seguir mostra como utilizar um RegularExpressionValidator para validar um endereo de email:
<asp:TextBox id="txtEMail" runat="server" /> <asp:RegularExpressionValidator id="regExpEMail" runat="server" ControlToValidate="txtEMail" ErrorMessage="Use o formato email@dominio.xxx" ValidationExpression="\w+@\w+\.\w+" Text="*" />
46
Colocaremos agora os controles de validao das entradas de usurio. Primeiro validaremos o campo txtNome, que ser obrigatrio, apartir da Toolbox (View > ToolBox), aba insira um controle RequiredFieldValidator aps o campo Nome. Altere as propriedade ID=Validador1 e ErrorMessage="Campo Obrigatrio" e insira a propriedade ControlToValidate="txtNome". Adicione um controle RangeValidator apso campo Idade e altere as propriedades ID="Validador2", ErrorMessage="Data invlida", e adicione MinimumValue="0", MaximumValue="130" e ControlToValidate="txtIdade". Adicione um controle RegularExpressionValidator aps o campo EMail altere as propriedades ID="Validador3", ErrorMessage="EMail invlido" e adicione ValidationExpression="\w+@\w+\.\w+" e ControlToValidate="txtEMail". Adicione um controle CompareValidator aps o campo Senha e altere as propriedades ID="Validador4", ErrorMessage="Senhas no so iguais" e insira ControlToValidate="txtSenha", ControlToCompare="txtSenhaConfirma". Adicione um controle ValidationSummary e altere seu ID para ID="relatorioValidacao". Apartir da aba Standard adicione um boto e altere as propriedades ID="btnOk" Text="Ok". O cdigo do seu formulrio deve ficar como a seguir:
<fieldset> <legend>Cadastro de Usurio</legend> <asp:Label ID="lblNome" runat="server" Text="Nome:"></asp:Label> <asp:TextBox ID="txtNome" runat="server"></asp:TextBox> <asp:RequiredFieldValidator ID="Validador1" ErrorMessage="Campo Obrigatrio" ControlToValidate="txtNome" runat="server"></asp:RequiredFieldValidator> <br /> <asp:Label ID="lblIdade" runat="server" Text="Idade:"></asp:Label> <asp:TextBox ID="txtIdade" runat="server"></asp:TextBox> <asp:RangeValidator ID="Validador2" ErrorMessage="Data invlida" MinimumValue="0" MaximumValue="130" ControlToValidate="txtIdade" runat="server"></asp:RangeValidator> <br /> <asp:Label ID="lblEMail" runat="server" Text="EMail:"></asp:Label> <asp:TextBox ID="txtEMail" runat="server"></asp:TextBox>
47
<asp:RegularExpressionValidator ID="Validador3" ErrorMessage="EMail invlido" ValidationExpression="\w+@\w+\.\w+" ControlToValidate="txtEMail" runat="server"></asp:RegularExpressionValidator> <br /> <asp:Label ID="lblSenha" runat="server" Text="Senha:"></asp:Label> <asp:TextBox ID="txtSenha" TextMode="Password" runat="server"></asp:TextBox> <br /> <asp:Label ID="lblConfirma" runat="server" Text="Confirme a Senha:"></asp:Label> <asp:TextBox ID="txtSenhaConfirma" TextMode="Password" runat="server"></asp:TextBox> <asp:CompareValidator ID="Validador4" ControlToValidate="txtSenha" ControlToCompare="txtSenhaConfirma" ErrorMessage="Senhas no so iguais" runat="server"></asp:CompareValidator> </fieldset> <asp:Button ID="btnOk" runat="server" Text="Ok" />
48
As Master Pages do ASP.NET permitem voc criar um layout consistente de pginas em sua aplicao. Voc cria uma nica master page que define o layout e comportamento bsico de todas as pginas ou de um grupo de pginas de sua aplicao. Voc pode ento, criar pginas individuais para exibir o contedo que voc quiser. A master page pode conter texto esttico, elementos HTML, e controles ASP.NET. Possuem a extenso .master, e so identificadas pela diretiva Page=Master em seu cabealho. Voc pode colocar o contedo comum a todo o site em uma master page, um cabealho comum que aparea em mltiplas pginas, por exemplo. Voc pode ter mais de uma master page em seu site para definir layouts diferentes em sees diferentes.
Por default, o servidor IIS impede que arquivos com a extenso .master sejam vistos em um navegador web. Isso impede o usurio de ver a master page com uma pgina ASP.NET stand alone. Uma master page quase igual a um Web Form, pois pode conter qualquer tipo de controle ASP.NET, incluindo elementos HTML de alto nvel como HTML, head, body e form. Voc pode usar tabelas, formatar a disposio dos elementos com divs, ter imagens, etc. O que diferencia uma master page de um Web Form normal, que ela tem presente um ou mais controles ContentPlaceHolder. ContentPlaceHolder, o controle que define as rea onde o contedo dinmico ser includo. Voc deve colocar os controles ContentPlaceHoder dentro dos elementos head, ou dentro de um form como segue:
<html>
49
<head runat="server"> <title>Aplicao Exemplo</title> <asp:ContentPlaceHolder id="ContentPlaceHolderCabecalho" runat="server"> </asp:ContentPlaceHolder> </head> <body> <form id="form1" runat="server"> ... <!-- Contedo padro --> <div class="conteudo"> <asp:contentplaceholder id="MainContentPlaceHolder" runat="server" /> ... <!-- contedo --> </div> <div class="rodape"> <asp:contentplaceholder id="ContentPlaceHolderRodape" runat="server"> <asp:label id="lblRodape" runat="server" Text="Texto de Rodap" /> </asp:contentplaceholder id="contentPlaceHolderRodape"> </div> ... </form> </body>
Content Page
Content Pages fornecem contedo para uma master page e so Web Forms que referenciam uma master page especfica. Voc tendo uma ou mais master pages no seu projeto, voc pode adicionar novas Content Pages ou converter seus Web Forms existentes em Content Pages.
50
Especificando a master page na diretiva Page, voc pode usar mais de uma master page no seu projeto utilizando master pages diferentes em diferentes Web Forms. Voc tambm pode especificar uma master page a nvel de aplicao no arquivo web.config:
<pages masterPageFile="MasterPage.master" />
Ficando dessa forma indicado que todas as pginas ASP.NET (arquivos .aspx) na aplicao devem ser automaticamente ligados master page indicada. Com exceo dos arquivos que tiverem o atributo MasterPageFile especificados, estes sero linkados a master page indicada por essa diretiva. As Content Page devem ter no mnimo um controle Content e o mesmo deve referenciar um ContentPlaceHolder na master page conforme exemplo:
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> </asp:Content>
No exemplo acima os controles Content referenciam na master page os ContentPlaceHolders head e ContentPlaceHolder1. Ou seja, na master page para a content page acima teramos:
<head runat="server"> <title>Untitled Page</title> <asp:ContentPlaceHolder id="head" runat="server"> </asp:ContentPlaceHolder> </head> <body> <form id="form1" runat="server"> <div> <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server"> </asp:ContentPlaceHolder> </div> </form> </body>
51
Na caixa de dilogo Add New Item, selecione o template Web Form, marque a opo Select Master Page e clique em Add:
52
Os controles Content da pgina criada, referenciaro automaticamente os Content Place Holders da master page selecionada.
User Controls
User Controls, ou controles do usurio, so pginas ASP.NET que outros Web Forms podem importar como se fossem Server Controls. User Controls fornecem elementos de interface e outras funcionalidades. Depois de voc criar um user control, qualquer web page da aplicao podem utilizar esse controle. Os User Controls so pginas ASP.NET com extenso .ascx. Podemos criar um user control para ampliar a funcionalidade de um determinado controle, ou constituir um conjunto de diversos controles que junto interajam para executar uma determinada tarefa, por exemplo, um grupo de controles para cadastrar os dependentes de um funcionrio. Os User Controls simplificam a reutilizao de cdigo e a criao de elementos de interface de uso corriqueiro. Por default, o IIS 7.0 no permite que os arquivos com a extenso ascx sejam vistos em um navegador.
53
, ele tem sua prpria lgica. Por exemplo, um user control pode gerenciar seu evento de postback no seu prprio controlador de eventos Page_Load.
A diretiva Control suporta quase todos atributos da diretiva Page. Entretanto, no suporta o atributo Trace. Caso voc queira usar o Trace, deve ativar na pgina em que o controle se encontra ou na aplicao.
Convertendo um Web Form em um User Control Remova todos elementos HTML de alto nvel Mude a diretiva Page para Control Adicione o atributo ClassName a diretiva Control Mude a extenso de aspx para ascx Mude o tipo de classe para UserControl 54
Adicione propriedades ao controle para permitir acesso aos dados privados do user control, se houver algum. Essas propriedades funcionam da mesma maneira que em um Web Form.
O atributo tagprefix determina um namespace nico para cada controle inserido pgina. O atributo TagName nico para cada user control. O atributo Src o caminho virtual para o arquivo do mesmo. Aps voc registrar o controle, voc pode inserir o mesmo na pgina como qualquer outro controle. Por exemplo:
<uc1:WebUserControl ID="WebUserControl1" runat="server" />
Voc tambm pode arrastar um user control do Solution Explorer para o Web Form. Quando voc faz isso, o Visual Studio automaticamente adiciona a diretiva Register pgina.
55
O ADO.NET um conjunto de classes que voc pode utilizar para manipular dados, e especificamente desenhado para gerenciar conexes em um ambiente desconectado. Alm de ser uma boa opo para aplicaes web, o ADO.NET utiliza o formato XML para transmisso de dados entre a aplicao e o banco de dados. composto de duas camadas, uma conectada e outra desconectada.
Camada Desconectada
A camada desconectada consiste em um nmero de classes para armazenamento de dados e relaes. A classe DataSet a classe principal de aramazenamento de dados em cach de memria. Contm uma coleo ou mais de objetos DataTable que so compostos de linhas e colunas de dados, chave primria, chave estrangeira, constraints, e informaes sobre os relacionamentos dos dados nos objetos DataTable. Voc pode imaginar a classe DataSet como uma representao em memria do banco de dados.
Camada Conectada
A camada conectada responsvel pelo trfego de dados entre a aplicao e a fonte de dados. A camada conectada especfica para cada banco de dados, como o SQL Server ou arquivo XML. A camada conectada tambm conhecida como provedora de dados e o ADO.NET j vem com alguns provedores de dados prontos para uso, incluindo: SQL Server .NET Framework Data Provider. Para acesso a bases SQL Server 7.0 e verses posteriores. OLE DB .NET Framework Data Provider. Para acessar qualquer fonte OLE DB que voc tenha um provedor OLE DB. ODBC .NET Framework Data Provider. Para acessar qualquer fonte ODBC para qual voc prossua um driver ODBC.
Um grande nmero de terceiros,incluindo IBM e ORACLE, fornecem implementaes de Data Providers para o Framework .NET.
56
A camada desconectada independente da fonte de dados pode ser usada para gerenciamento da informao em memria. Em funo disso, pode ser usada com mltiplas fontes de dados, ou dados XML, ou para gerenciar dados locais da aplicao. Opcionalmente, voc pode conectar a alguma fonte de dados usando a camada conectada. composta das seguintes classes, encontradas no namespace System.Data: Tipo Constraint Descrio Representa uma restrio que rege um ou mais objetos DataColumn. Uma constraint uma regra que usada para manter a integridade dos dados em uma tabela. A classe abstrata Constraint tem duas classes derivadas que so usadas para chaves primrias e/ou colunas de valores nicos utilizando a classe UniqueConstraint. A classe base abstrata Constraint tambm contem a ao a ser executada sobre os dados de uma tabela filha quando os dados de uma tabela paid apagada usando a classe ForeignKeyConstraint. Representa uma simples coluna de um DataTable, mltiplos objetos DataColumn representam a estrutura de um DataTable. Representa uma relao pai/filho entre dois objetos DataTable. Um objeto DataRelation unido a um numero igual de objetos DataColumn de dois objetos DataTable diferentes. O bjeto DataRelation permite a navegao entre tabelas relacionadas. Representa um registro de dado em um objeto DataTable. Esse o container geral de objetos que representa um objeto database na memria,consistindo de um ou mais objetos DataTable e zero ou mais objetos DataRelation. Esse classe serializavel. Representa uma tabela de dados em memria. A estrutura composta de um ou mais objetos DataColumn, e a informao salva em objetos DataRow. Essa classe serializavel e pode ser transportada via rede. Obtem o contedo de um mais objetos DataTable na forma de um ou mais read-only, forward-only result sets. Representa uma viso customizada de um DataTable, que pode ser utilizado para ordenar, filtrar, procurar, editar, e navegar.
DataColumn DataRelation
DataRow DataSet
DataTable
DataTableReader DataView
Camada Conectada
A camada conectada, fornece um link entre a fonte de dados e a camada desconectada. Os tipos bsicos, encontrados no namespace System.Data.Common esto listados abaixo. A camada conectada inclui as classes DataAdapter, Connection, Command e DataReader. Que so Data Providers desenhados para manipulao de dados e para rpida acessos leitura de dados, forward-only, read-only.O objeto Commandpermite acesso a comandos do banco de dados, permite retornar dados ao banco, modificar informao, executar stored procedures, e enviar ou receber parmetros. A classe DataReader fornece um stream de dados de alta performance. E a classe DataAdapter
57
fornece a ponte entre o objeto DataSet e a fonte de dados. A classe DataAdapter utiliza o objeto Command para executar comandos SQL na fonte de dados tanto para caregar o DataSet como para reconciliar as mudanas que foram feitas no objeto DataSet, de volta para banco. DBCommand Representa um comando SQL ou stored procedure a ser executada no banco de dados. Esse tipo normalmente dividido em quatro diferente grupos, um para seleo de dados, um para insero, um para atualizao e um quarto para excluso. Representa a conexo fonte de dados e se conecta a ela a partir de uma connection string. Representa uma conexo a um banco de dados e a um conjunto de comandos SQL que so usados para preencher um DataSet e/ou um DataTable, e atualizar a fonte de dados.Esse objeto um mediador entre cliente e servidor, e usa um objeto de conexo e comando para executar suas tarefas. L um stream de registros de um data source (forward-only, readonly).
DbConnection DbDataAdapter
DbDataReader
Os tipos listados so tipos abstratos e precisam ser herdados. Voc precisa utilizar os seguintes tipos para implementaes especficas de banco de dados: Para uso com SQL Server .NET Data Provider, voc precisa das classes SqlDataAdapter, SqlDataReader, SqlCommand, e SqlConnection, encontrados no namespace System.Data.SqlClient. Para uso com OLE DB .NET Data Provider, voc tem OleDbDataAdapter, OleDbDataReader, OleDbCommand, e OleDbConnection, todas sob o namespace System.Data.OleDb. Para uso com ODBC .NET Data Provider, voc tem OdbcDataAdapter, OdbcDataReader, OdbcCommand e OdbcConnection, todas sob o namespace System.Data.Odbc. Para uso com Oracle .NET Data Provider, voc em OracleDataAdapter, OracleDataReader, OracleCommand, and OracleConnection, todas sob o namespace System.Data.OracleClient. Voc pode utilizar essas classes para os bancos Oracle verso 8.1.7 ou mais recentes.
Observao: voc no pode misturar os tipos da camada conectada. Todos os tipos utilizados para gerenciar dados em uma determinada fonte, devem vir do mesmo .NET Data Provider.
Crie um novo projeto em File > New Web Site, selecione o template ASP.NET Web Site, de o nome de WebSite3, utiliza a linguagen Visual C#, e clique em Ok. No Solution Explorer, sobre a pasta App_Data, clique em Add New Item... , selecione Sql Server Database, utilize o nome Database.mdf, e clique em Add. 58
Na aba Server Explorer ( View >Server Explorer ), abra expanda o ramo Database.mdf e clique com o boto direito sobre o item Tables:
Clique com o boto direito, selecione Add New Table, e insira a seguinte definio:
Clique com o boto direito sobre a linha id, e selecione a opo Set Primary Key, e na aba Properties marque a opo IsIdentity com Yes:
59
Clique em File > Save Table, nomeie a tabela como Contatos e clique Ok.
Criando um Formulrio de Insero de Dados Na aba Solution Explorer, clique sobre a pgina Default.aspx e abra para edio no modo Source. Criaremos um formulrio de entrada de dados para os campos nome, email, telefone, e um boto salvar que executar a entrada dos dados.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Insero de Dados</title> </head> <body> <form id="form1" runat="server"> <div> <table style="width: 100%;"> <tr> <td>Nome: </td> <td> <asp:TextBox ID="txtNome" runat="server"></asp:TextBox> </td> </tr> <tr> <td> EMail: </td> <td> <asp:TextBox ID="txtEMail" runat="server"></asp:TextBox> </td> </tr> <tr>
60
<td> Telefone: </td> <td> <asp:TextBox ID="txtTelefone" runat="server"></asp:TextBox> </td> </tr> <tr> <td> </td> <td> <asp:Button ID="btnSalvar" runat="server" Text="Salvar" /> </td> </tr> </table> </div> </form> </body> </html>
No modo de Design, clique duas vezes sobre o boto Salvar do formulrio e inclua os namespaces na pgina:
using System.Data.SqlClient;
public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void btnSalvar_Click(object sender, EventArgs e) { // inicializa conexo ao banco // C:\sites\WebSite3\App_Data\Database.mdf // altere conforme a localizao da sua aplicao SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\sites\WebSite3\App_Data\Databa
61
se.mdf;Integrated Security=True;User Instance=True"); conn.Open(); // cria um novo comando SQL SqlCommand cmd = new SqlCommand( "INSERT INTO Contatos (nome, email, telefone) VALUES ( @nome, @email, @telefone )", conn); // cria os parametros do comando SqlParameter[] parametro = new SqlParameter[3]; parametro[0] = new SqlParameter("nome", txtNome.Text); parametro[1] = new SqlParameter("email", txtEMail.Text); parametro[2] = new SqlParameter("telefone", txtTelefone.Text); // substitui parametros no comando cmd.Parameters.AddRange(parametro); // executa comando SQL no banco cmd.ExecuteNonQuery(); // fecha conexao conn.Close(); Response.Redirect("Default.aspx"); } }
Salve e execute a pgina em Debug > Start Debugging, e insira alguns registros. OBSERVAO: para obter a string de conexo do banco, na aba Server Explorer, clique com o boto direito sobre o banco de dados, selecione Properties, e copie a string que se encontra na propriedade Connection String. Criando uma Listagem de Dados Para a listagem utilizaremos o controle de dados DataGrid, que recebe um DataReader como fonte de dados. No solution Explorer, sobre a localizao da aplicao, clique com o boto direito e selecione a opo Add New Item, template Web Form, nomeie o mesmo como listagem.aspx, linguagem C#,e marque a opo Place code in a separate file. Abra o arquivo listagem.aspx para edio, no modo Source, e insira um controle GridView a partir da aba Data da Toolbox, e altere o nome do mesmo para gvListagem.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="listagem.aspx.cs" Inherits="listagem" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server">
62
<title>Listagem</title> </head> <body> <form id="form1" runat="server"> <div> <asp:GridView ID="gvListagem" runat="server"> </asp:GridView> </div> </form> </body> </html>
Clique com o boto direito sobre o cdigo e selecione View Code e insira o seguinte cdigo no evento Page_Load, tomando cuidado de importar o namespace using System.Data.SqlClient;.
using using using using using using using using using using using using using System; System.Collections; System.Configuration; System.Data; System.Linq; System.Web; System.Web.Security; System.Web.UI; System.Web.UI.HtmlControls; System.Web.UI.WebControls; System.Web.UI.WebControls.WebParts; System.Xml.Linq; System.Data.SqlClient;
public partial class listagem : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { // inicializa conexo ao banco // C:\sites\WebSite3\App_Data\Database.mdf // altere conforme a localizao da sua aplicao SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\sites\WebSite3\App_Data\Databa se.mdf;Integrated Security=True;User Instance=True"); conn.Open(); // cria um novo comando SQL SqlCommand cmd = new SqlCommand("SELECT * FROM Contatos", conn); // cria um novo DataAdapter apartir do comando SQL SqlDataAdapter adapter = new SqlDataAdapter(cmd); // cria um DataSet para leitura dos dados DataSet ds = new DataSet(); // preenche o DataSet adapter.Fill(ds); // liga o DataSet a GridView gvListagem.DataSource = ds; gvListagem.DataBind();
63
64
O XML um formato para a criao de documentos com dados organizados de forma hierrquica, como se v, frequentemente, em documentos de texto formatados, imagens vetoriais ou bancos de dados. um subtipo de SGML (acrnimo de Standard Generalized Markup Language, ou Linguagem Padronizada de Marcao Genrica) capaz de descrever diversos tipos de dados. Seu propsito principal a facilidade de compartilhamento de informaes atravs da Internet. Pela sua portabilidade, j que um formato que no depende das plataformas de hardware ou de software, um banco de dados pode, atravs de uma aplicao, escrever em um arquivo XML, e um outro banco distinto pode ler ento estes mesmos dados. Tambm um formato de cdigo fcil de ler. Veja abaixo exemplo de cdigo XML descrevendo um currculo:
<?xml version="1.0" encoding="UTF-8"?> <curriculo> <InformacaoPessoal> <DataNascimento>23-07-68</DataNascimento> <Nomecompleto>...</Nomecompleto> <Contatos> <Morada> <Rua>R.Topazio</Rua> <Num>111</Num> <Cidade>Porto</Cidade> <Pais>Portugal</Pais> </Morada> <Telefone>9999-9999</Telefone> <CorreioEletronico>email@email.com</CorreioEletronico> </Contatos> <Nacionalidade>Portuguesa</Nacionalidade> <Sexo>M</Sexo> </InformacaoPessoal> <objetivo>Atuar na area de TI</objetivo> <Experiencia> <Cargo>Suporte tecnico</Cargo> <Empregador>Empresa, Cidade - Estado</Empregador> </Experiencia> <Formacao>Superior Completo</Formacao> </curriculo>
65
Em seguida adicionamos os dados, apartir da estrutura criada, adicionar dados ao XML, utilizando um objeto DataTable e salvando os mesmos:
DataTable planilha = new DataTable("Template"); planilha.Columns.Add("Matricula"); planilha.Columns.Add("Nome"); planilha.Columns.Add("Nota1"); planilha.Columns.Add("Nota2"); planilha.WriteXmlSchema(@"c:\TemplateAlunos.xml"); planilha.ReadXmlSchema(@"c:\TemplateAlunos.xml"); DataRow linha = planilha.NewRow(); //atribuindo valores a linha linha["Matricula"] = "243343"; linha["Nome"] = "Joao Bosco"; linha["Nota1"] = "10"; linha["Nota2"] = "5"; planilha.Rows.Add(linha); planilha.WriteXmlSchema(@"c:\TemplateAlunos.xml"); planilha.WriteXml(@"c:\alunos.xml");
66
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <asp:GridView ID="gvXml" runat="server"> </asp:GridView> </div> </form> </body> </html>
Poderamos ter os dados do XML gerado no exerccio anterior associado da seguinte forma:
using using using using using using using using using using using System; System.Configuration; System.Data; System.Linq; System.Web; System.Web.Security; System.Web.UI; System.Web.UI.HtmlControls; System.Web.UI.WebControls; System.Web.UI.WebControls.WebParts; System.Xml.Linq;
public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { DataTable tabela = new DataTable(); tabela.ReadXmlSchema(@"c:\TemplateAlunos.xml"); tabela.ReadXml(@"c:\alunos.xml"); gvXml.DataSource = planilha; gvXml.DataBind(); } }
67
Aplicaes AJAX so aplicaes que obtm dados do servidor de forma assncrona em background sem afetar a aparncia e o comportamento da pgina. O ASP.NET AJAX uma srie de extenses para o ASP.NET desenvolvidas pela Microsoft que permitem implementar funcionalidades AJAX, criando pginas com atualizaes parciais, somente nas reas em que sofrem alteraes. Isso d ao usurio uma melhor experincia que emula as interfaces das aplicaes desktop. AJAX no uma tecnologia, mas sim um termo que se refere ao uso de um grupo de tecnologias e a sigla para Asynchronous JavaScript and XML. AJAX usa uma combinao que utiliza: Objeto XMLHttpRequest, que permite troca de dados entre a pgina e o servidor web de forma assicrona. HTML, XHTML e CSS, que prov marcao e estilos para a pgina Web. XML e outros formatos para transferncia de dados como JavaScript Object Notation (JSON) Document Object Model (DOM), que permite ao JavaScript interagir com o documento web.
O Framework ASP.NET AJAX inclu: Server-side ASP.NET AJAX. Incluso no ASP.NET 3.5 para construo de Server controls. Esses componentes tambm esto disponveis no ASP.NET 2.0 em um pacote a parte chamado ASP.NET 1.0 extensions. Client-side ASP.NET AJAX. A Microsoft Ajax Library 3.5 um biblioteca javascript que fornece funcionalidades client-side para o ASP.NET AJAX Framework. integrada ao ASP.NET 3.5 e disponibilizada tambm em download a parte para uso em outro ambiente como PHP. AJAX control toolkit, um projeto open-source, um esforo conjunto entre Microsoft e comunidade que prov infra estrutura para construo de controles ASP.NET AJAX. jQuery , biblioteca javascript focada na manipulao do DOM. ASP.NET 2.0 AJAX Templates, um pacote com uma srie de templates para construo de aplicaes ASP.NET AJAX.
Namespaces
O AJAX implementado em diversos namespaces:
68
Namespace System.Web.Configuration
System.Web.Handlers System.Web.Script.Serialization
Descrio Contm classes que permitem voc configurar o ASP.NET AJAX Extensions via programao Contm classes manipuladoras HTTP que processam requisies ao servidor Contem classes que fornecem serializao e deserializao JSON para tipos gerenciados. Tambm formas para estender e customizar a serializao. Prov atributos para customizar o suporte a web services para o AJAX. Classes e interfaces que permite a comunicao cliente-servidor Classes que podem ser utilizadas para estender o suporte ao ASP.NET AJAX durante o desenvolvimento.
69
Adicione um Label dentro do UpdatePanel e atualize seu ID para lblAjax. Logo abaixo, dentro do UpdatePanel coloque um boto, atualize seu label para Atualizar Painel e seu ID para btnAtualizar. No evento Page_Load, utilize o seguinte cdigo:
lblNormal.Text = "Hora Carga da Pgina: " + DateTime.Now.ToString();
public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { lblNormal.Text = "Hora Carga da Pgina: " + DateTime.Now.ToString(); } protected void btnAtualizar_Click(object sender, EventArgs e) { lblAjax.Text = "Hora Ajax:" + DateTime.Now.ToString(); } }
E seu pgina:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Untitled Page</title> </head>
70
Segurana em aplicaes ASP.NET <body> <form id="form1" runat="server"> <div> <asp:Label ID="lblNormal" runat="server"></asp:Label> <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <asp:Label ID="lblAjax" runat="server" Text=""></asp:Label> <br /> <asp:Button ID="btnAtualizar" runat="server" Text="Atualizar Painel" onclick="btnAtualizar_Click" /> </ContentTemplate> </asp:UpdatePanel> </div> </form> </body> </html>
Salve o projeto e execute. Ao clicar no boto Atualizar Painel somente o UpdatePanel atualizado. Ou seja, a pgina no est sendo postada e o evento Page_Load no est sendo acionado ao se clicar no boto, como aconteceria em uma pgina sem AJAX.
71
Para implementar segurana voc deve estar familiarizado com dos conceitos fundamentais: autenticao e autorizao.
Autenticao
Autenticao o processo de obter as credenciais de identificao, como nome e senha de um usurio, validando essas credenciais contra alguma autoridade como um banco de dados. Se as credenciais forem vlidas, a identidade que submetida considerada valida.
Autorizao
Depois que um cliente autenticado, o processo de autorizao determina se o cliente tem acesso a um determinado recurso ou no. O processo de autorizao limita o acesso permitindo ou negando permisses especficas a um determinado cliente autenticado.
Autenticao Baseada em Formulrio Forms-based Authentication, se refere a um sistema onde requisies no autenticadas so direcionadas a um formulrio HTML usando protocolo HTTP para o 72
usurio. O usurio fornece suas credenciais e submete o formulrio. O sistema ento cria um cookie de autenticao para o usurio aps valid-lo que passa a acompanhar o usurio durante a seo. o mtodo ideal para se ter um mtodo de autenticao customizado. o ideal para quase todas as aplicaes Internet. Permite voc armazenar as credenciais de usurio em arquivos XML, banco de dados, ou mesmo o web.config. Um exemplo de controle de acesso a uma pgina ou Master Page, durante o evento Page_Load, utilizando Session para verificar se o usurio j est logado no sistema:
protected void Page_Load(object sender, EventArgs e) { if (Session["AUTENTICADO"] == null) { // se no foi atribudo valor a varivel // de controle de sesso Response.Redirect("default.aspx"); } else if (!Convert.ToBoolean(Session["AUTENTICADO"])) { // se controle de login for false Response.Redirect("default.aspx"); //login } if (Request["acao"] != null && Request["acao"].Equals("sair")) { // se usurio solicitou encerramento da seo Session["AUTENTICADO"] = null; Session["USUARIO"] = null; Response.Redirect("default.aspx"); //login } // nenhuma das opes acima, usurio OK pode acessar a pgina }
73
Segurana em aplicaes ASP.NET </tr> <tr> <td>Senha</td> <td> <asp:TextBox ID="txtSenha" runat="server" TextMode="Password"></asp:TextBox> </td> </tr> <tr> <td></td> <td> <asp:Button ID="btnLogin" runat="server" Text="entrar" /> </td> </tr> <tr> <td colspan="2"> <asp:Label ID="txtResultado" runat="server" Text=""></asp:Label> </td> </tr> </table> </div> </form> </body> </html>
Cdigo de Autenticao:
using using using using using using using using using using using using System; System.Configuration; System.Data; System.Linq; System.Web; System.Web.Security; System.Web.UI; System.Web.UI.HtmlControls; System.Web.UI.WebControls; System.Web.UI.WebControls.WebParts; System.Xml.Linq; System.Data.SqlClient;
public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void btnLogin_Click(object sender, EventArgs e) { if (txtUsuario.Text != "" && txtSenha.Text != "") { // inicializa conexo ao banco SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=c:\sites\WebSite4\App_Data\Databa se.mdf;Integrated Security=True;User Instance=True"); conn.Open();
74
// cria um novo comando SQL SqlCommand cmd = new SqlCommand("SELECT * FROM usuario WHERE usuario=@usuario AND senha=@senha", conn); // cria os parametros do comando SqlParameter[] parametro = new SqlParameter[2]; parametro[0] = new SqlParameter("usuario", txtUsuario.Text); parametro[1] = new SqlParameter("senha", txtSenha.Text); // substitui parametros no comando cmd.Parameters.AddRange(parametro); // executa a consula SqlDataReader dr = cmd.ExecuteReader(); if (dr.Read()) { // usurio ok, entra no sistema Session["AUTENTICADO"] = true; Session["USUARIO"] = txtUsuario.Text; Response.Redirect("Default.aspx"); } // fecha conexao conn.Close(); // usurio invlido, volta a tela de login Response.Redirect("Login.aspx"); } } }
SQL Injection
A Injeo de SQL, mais conhecida atravs do termo americano SQL Injection, um tipo de ameaa de segurana que se aproveita de falhas em sistemas que interagem com bases de dados via SQL. A injeo de SQL ocorre quando o atacante consegue inserir uma srie de instrues SQL dentro de uma consulta (query) atravs da manipulao das entrada de dados de uma aplicao. Para nos prevenirmos contra esse tipo de ataque, o ASP.NET fornece o objeto SqlCommand, junto com a estrutura SqlParameter. Juntos, eles fazem a validao e ajustes nos dados que o usurio envia e que venham a compor o comando SQL. Exemplo de utilizao:
// cria um novo comando SQL SqlCommand cmd = new SqlCommand("SELECT * FROM usuario WHERE usuario=@usuario AND senha=@senha", conn); // cria os parametros do comando SqlParameter[] parametro = new SqlParameter[2];
75
Segurana em aplicaes ASP.NET parametro[0] = new SqlParameter("usuario", txtUsuario.Text); parametro[1] = new SqlParameter("senha", txtSenha.Text); // substitui parametros no comando cmd.Parameters.AddRange(parametro);
76
77