manual de asp.net

116
Unidade 1 – Introdução à Plataforma .NET Framework e a Linguagem C# VÍDEO AULA 01 Um novo modelo de desenvolvimento A partir dos anos 90 a internet começou a mudar a forma como as organizações se comunicavam. Aplicações tradicionais como processadores de texto e planilhas eletrônicas eram criadas para funcionar individualmente, acessando dados que estavam armazenados na própria maquina que o aplicativo era executado. A maioria dos novos softwares é desenvolvida para funcionarem de forma distribuída, acessando bases remotas e provendo serviços para outros programas, chamados de aplicativos clientes. Como resultado o primeiro objetivo dos novos softwares é suportar o compartilhamento de informações pela rede e a distribuição delas através de mensagem eletrônica, e-mail e até mesmo redes sociais. Basicamente o novo modelo de desenvolvimento de software está deixando de apenas criar funcionalidades básicas de um sistema isolado para a criação de serviços que possibilitam gerar soluções para uma grande quantidade de aplicações. O .NET Framework possibilita o desenvolvimento de uma plataforma robusta para criação de aplicativos para desktop, celulares e Internet. Torna o desenvolvimento para internet uma tarefa fácil como nunca foi anteriormente. Fácil publicação e manutenção Aplicações podem ser criadas utilizando diferentes tecnologias: Saiba mais: Visão geral do .NET Framework http://msdn.microsoft.com/pt-br/library/hh425099.aspx Web pages Web Services Página 1 de 116

Upload: francisco-jose

Post on 14-Dec-2015

51 views

Category:

Documents


0 download

DESCRIPTION

Manual prático de introdução a programação em ASP.net.Demonstra conceitos básicos e sua utilização prática

TRANSCRIPT

Page 1: Manual de ASP.NET

Unidade 1 – Introdução à Plataforma .NET Framework e a Linguagem C#

VÍDEO AULA 01

Um novo modelo de desenvolvimento

A partir dos anos 90 a internet começou a mudar a forma como as organizações se comunicavam. Aplicações tradicionais como processadores de texto e planilhas eletrônicas eram criadas para funcionar individualmente, acessando dados que estavam armazenados na própria maquina que o aplicativo era executado.  A maioria dos novos softwares é desenvolvida para funcionarem de forma distribuída, acessando bases remotas e provendo serviços para outros programas, chamados de aplicativos clientes. Como resultado o primeiro objetivo dos novos softwares é suportar o compartilhamento de informações pela rede e a distribuição delas através de mensagem eletrônica, e-mail e até mesmo redes sociais. Basicamente o novo modelo de desenvolvimento de software está deixando de apenas criar funcionalidades básicas de um sistema isolado para a criação de serviços que possibilitam gerar soluções para uma grande quantidade de aplicações.

O .NET Framework possibilita o desenvolvimento de uma plataforma robusta para criação de aplicativos para desktop, celulares e Internet. Torna o desenvolvimento para internet uma tarefa fácil como nunca foi anteriormente.

Fácil publicação e manutenção

Aplicações podem ser criadas utilizando diferentes tecnologias:

Saiba mais: Visão geral do .NET Frameworkhttp://msdn.microsoft.com/pt-br/library/hh425099.aspx

Web pages

Web Services

Bibliotecas (DLLs)

Windows Forms

Console Application

O .NET Framework torna fácil a tarefa de publicação, na maioria dos cenários, basta copiar o aplicativo e seus componentes em uma pasta e executá-lo. Isso é possível porque o .NET Framework localiza e carrega todas as dependências necessárias que o aplicativo precisa,

Página 1 de 102

Page 2: Manual de ASP.NET

mesmo se houverem diferentes versões do mesmo componente no sistema.

As configurações pós-instalação também são um ponto importante e que é muito bem tratado pelo .NET Framework. Configurações de segurança, conexões com banco de dados e parâmetros da aplicação podem ser facilmente alterados sem a necessidade de compilar a aplicação novamente, isso porque o .NET Framework trabalha com essas configurações em um modelo baseado em arquivos. Um arquivo de configuração é um arquivo XML que pode alterar o comportamento de uma aplicação. Por exemplo, o administrador do sistema pode configurar a aplicação para utilizar apenas uma versão de um componente instalado no sistema, ou até mesmo alterar o caminho de um banco de dados se o mesmo foi migrado para outro local, tudo isso de uma forma flexível e sem impactar o sistema.

Segue abaixo o modelo de um arquivo de configuração utilizado no .NET:

Vídeo: XML – Teoria e Prática

https://www.youtube.com/watch?v=I-me4ipqpxY

Cada um dos nós do xml acima contém uma configuração que pode ir de uma referência de um recurso utilizado na aplicação até uma string de conexão utilizada para conectar no banco de dados.

Elementos do .NET FRAMEWORK

Página 2 de 102

Page 3: Manual de ASP.NET

O .NET Framework consiste em três camadas básicas:

Common Language Runtime

Commom Type System

.NET Class Library

A seguir vamos conhecer cada uma dessas camadas.

 

Common Language Runtime

O Common Language Runtime (CLR) é uma camada entre a aplicação e o sistema operacional. O CLR simplifica o desenvolvimento de uma aplicação e reduz a quantidade de código que os desenvolvedores têm que escrever pois disponibiliza uma grande quantidade de recursos, dentre eles podemos citar o gerenciamento de memória e de threads (paralelismo), ciclo de vida de componentes e tratamento de erros. Um dos maiores trunfos do CLR é a forma transparente como ele provê todos os recursos citados, não importando a linguagem de programação utilizada e retirando qualquer esforço requerido do programador.

O CLR também é responsável por compilar o código antes do mesmo ser executado. Ao contrário de produzir uma compilação binária, como a maioria dos compiladores faz, o compilador do .NET produz a representação do código em uma linguagem comum para o .NET Framework, chamada de Microsoft Intermediate Language (MSIL), mais conhecido com IL. Quando o código é executado pela primeira vez , o CRL invoca um compilador especial chamado Just In Time (JIT), que transforma o código IL em um executável específico para o tipo do processador que a aplicação será executada. Como todas as linguagens do .NET Framework têm como resultado a mesma compilação, todas têm o mesmo desempenho. Isso quer dizer que um programa escrito em Visual Basic .NET (VB.NET) pode trabalhar da mesma forma que um programa desenvolvido em C Sharp (C#).

A imagem abaixo ilustra como funciona a compilação de um programa desenvolvido em uma das linguagens do .NET Framework, no caso o C#:

Figura - Processo de Compilação do .NET

Página 3 de 102

Page 4: Manual de ASP.NET

Fonte: Introduction... (2013)

 

Commom Type System

O Commom Type System (CTS) é um componente do CLR que mantém um conjunto padrão de tipos de dados, cada um com características e comportamentos em comum. A grande vantagem por trás do CTS é a possibilidade de trabalhar com os mesmos tipos de dados utilizando qualquer uma das linguagens do .NET. Por exemplo, se uma aplicação em C# precisa se comunicar com um componente desenvolvido em VB.NET ela não precisará conter nenhum código adicional para conseguir se comunicar com o componente.

O CTS permite que cada linguagem de programação do .NET utilize os tipos de dados especificados na linguagem, o compilador do .NET converte o tipo de dados utilizado para o tipo de dados definido no CTS. Também é possível utilizar na programação diretamente o tipo definido no CTS.

A tabela a seguir mostra cada um dos tipos definidos no CTS:

Página 4 de 102

Page 5: Manual de ASP.NET

.NET Class Library

O .NET Class Library é a camada que provê uma grande quantidade de classes que executam as mais diversas funções, por exemplo, efetuar operações matemáticas, manipular arquivos XML ou bancos de dados.

Para facilitar o uso das classes as mesmas foram dividas em pacotes chamados de namespaces. O namespace raiz do .NET Class Library é chamado de System, que contém classes bases e tipos de dados, como a String, o Int16, Console e Array.

Exemplos de namespaces do .NET Class Library:

System.Data.SqlClient: Contém classes para trabalhar com o banco de dados SQL Server;

System.IO: Contém classes para trabalhar com arquivos e dados serializados em memória.

A grande vantagem de se trabalhar com o .NET Class Library é a possibilidade de utilizar todos os recursos das classes nas diferentes linguagens do .NET Framework, facilitando na publicação da aplicação, pois o .NET Class Library está incluso em todas as versões do .NET Framework.

 

Tecnologias unificadas

Até agora, foi abordado como funcionam os componentes internos do .NET Framework. As tecnologias, listadas a seguir, são as

Página 5 de 102

Page 6: Manual de ASP.NET

diferentes formas disponíveis para utilizar todos os recursos da plataforma.

Vídeo: .NET Framework e seus componentes

https://www.youtube.com/watch?v=zbDsiOYlBtk

Visual Studio

Windows Forms

ASP.NET

Visual Studio

O Visual Studio é uma IDE (Integrated Development Environment) para desenvolvimento utilizando qualquer uma das linguagens contidas no .NET Framework. O Visual Studio disponibiliza recursos para trabalhar com diversas linguagens no mesmo ambiente. Contém ferramentas para DEBUG, designers para HTML, XML, banco de dados e códigos de servidor. Além disso conta com IntelliSense, recurso que completa o código, garantindo que o desenvolvedor evite erros, além de adicionar um alto ganho na produtividade.

Veja na tabela abaixo alguns recursos do Visual Studio:

 

Windows Forms

Windows Forms é o nome dado para o conjunto de classes que contém funcionalidades que suportam criar aplicações desktop tradicionais, que contém uma interface gráfica para interação do usuário. O Windows Forms torna fácil o desenvolvimento de sistemas para o usuário final utilizando qualquer uma das linguagens do .NET Framework. O Visual Studio permite o desenvolvimento Windows

Página 6 de 102

Page 7: Manual de ASP.NET

Forms arrastando controles em uma ferramenta visual, descartando a necessidade de criar a parte gráfica da aplicação utilizando código, recurso esse chamado de drag-and-drop (arrastar e soltar).

Desenvolvimento Windows Forms no Visual Studio

Saiba mais: Introdução ao Windows Forms

http://msdn.microsoft.com/pt-br/vbasic/ms789117.aspx

ASP.NET

Para o desenvolvimento de aplicações WEB o .NET framework dispõe do ASP.NET, uma arquitetura de desenvolvimento criada especificamente para criar aplicações WEB poderosas com alta produtividade.

O ASP.NET é dividido em várias tecnologias, entre ela o ASP.NET Web Forms, ASP.NET MVC e Web Services.

ASP.NET Web Forms

Desenvolvedores que não têm familiaridade com o desenvolvimento para WEB podem perder muito tempo para descobrir como validar um simples campo de e-mail em um formulário de contato. Uma validação pode ser executada tanto no lado cliente, como no lado servidor. Decidir qual lado seguir pode ser complicado pelo fato de que cada uma das abordagens tem suas vantagens e desvantagens, algumas podem não ficar explicitamente visíveis no momento do desenvolvimento se não houver a atenção necessária. Se a validação for feita no lado cliente utilizando Javascript, deve ser considerado o risco do navegador do usuário não suportar Javascript, ou até mesmo

Página 7 de 102

Page 8: Manual de ASP.NET

estar desativado. Dessa forma os dados seriam enviados sem estar devidamente validados. Se os dados forem validados no servidor, o tempo para enviar esses dados e obter uma resposta pode frustrar o usuário, ou seja, a aplicação poderá ser segura mas irá pecar na usabilidade.

O Web Forms simplifica todos os processos da arquitetura cliente-servidor, pois tem como objetivo facilitar a entrada de desenvolvedores desktop no ambiente WEB, disponibilizando recursos como o drag-and-drop para adicionar controles em uma página e editar suas características visualmente.

Ambiente de desenvolvimento em ASP.NET no Visual Studio

 

ASP.NET MVC

Vídeo: Introdução ao ASP.NET

http://msdn.microsoft.com/pt-br/asp.net/gg252004.aspx

O ASP.NET MVC é um framework para trabalhar com o padrão de projeto Model-View-Controller, permitindo o controle total sobre o que é enviado para o cliente e utilizando todo o poder do ASP.NET e do .NET Framework. É uma excelente plataforma para trabalhar com desenvolvimento dirigido por testes por não conter cenários complexos como o ciclo de vida de páginas baseado em eventos como o ASP.NET Web Forms. Também introduziu no ASP.NET a

Página 8 de 102

Page 9: Manual de ASP.NET

possibilidade de configurar rotas para criar endereços amigáveis, permitindo assim um melhor desempenho na disponibilização de conteúdo através de mecanismos de busca.

Saiba mais: Padrão MVC

http://msdn.microsoft.com/pt-br/magazine/cc337884.aspx

 

Web Services

Um Web Service é uma aplicação que expõe funcionalidades na web através de métodos. Web Services são desenvolvidos para serem consumidos por outras aplicações e não têm a intenção de interagir diretamente com o usuário final. Web Services tornam fáceis a criação de recursos para serem acessados remotamente. Aplicativos clientes podem invocar os métodos de um Web Service como se eles estivesses definidos na própria aplicação.

 

Linguagem C#

A linguagem C# foi criada pela Microsoft especificamente para a plataforma .NET. A criadora da linguagem descreve a mesma como simples, moderna, orientada a objetos, fortemente tipada (apesar dos tipos dinâmicos introduzidos na versão 4) derivada do C e C++. Algumas pessoas por sua vez diriam que a linguagem também é derivada do Java, por algumas similaridades em seu design. Sintaticamente o C# é muito parecido com C++ e Java. Algumas palavras chaves são iguais, blocos de código são marcados com chaves e as instruções são terminadas com ponto e vírgula. A primeira impressão ao ver um bloco de código escrito em C# é que ele é muito parecido com C++ e Java. Apesar de toda essa similaridade o C# é muito mais simples de ser absorvido do que o C++, mas tendo quase o mesmo nível de dificuldade do Java. Seu design apesar de similar, é mais moderno que as outras linguagens citadas.

Algumas das principais características do C#:

Suporte total a programação orientada a objetos, incluindo Herança e Interfaces, métodos virtuais, e sobrecarga de operadores;

Uma grande quantidade de tipos de dados bases, como tipos numéricos inteiros e fracionados;

Suporte para gerar automaticamente documentação em XML; Limpeza de memória automática de recursos não utilizados; Acesso total a Class Library do .NET Framework, e fácil acesso

as APIs do Windows;

Página 9 de 102

Page 10: Manual de ASP.NET

Ponteiros e direto acesso a memória são permitidos, mas a linguagem foi projetada de uma forma para que não seja necessário o uso desses recursos;

Suporte a propriedades e eventos; C# pode ser utilizado para criar qualquer tipo de aplicação

dentro da plataforma .NET, como páginas em ASP.NET e Web Services.

Muitos dos recursos citados também são suportados por outras linguagens do .NET Framework, como o VB.NET e o Visual C++, mas deve ser levado em consideração que o C# foi desenvolvido do zero para o .NET. Sendo assim, tem um suporte mais completo desses recursos, ao mesmo tempo em que sua sintaxe é mais fluída para sua utilização.

O que é preciso para escrever e rodar código C#

O .NET Framework, atualmente na versão 4.5, é necessário para executar aplicações escritas em qualquer linguagem do .NET.

Apesar do C# poder ser escrito em qualquer editor de texto de terceiros, é altamente recomendado a utilização da IDE oficial, o Visual Studio, pois  contém ferramentas poderosas que possibilitam um ganho considerável na produtividade.

 

C# Básico

Agora que foram apresentados os principais recursos da linguagem C#, veremos como utilizá-los, compilando o código de exemplo abaixo:

Saiba mais: Compilador C#

http://msdn.microsoft.com/pt-br/library/vstudio/2fdbz5xd.aspx

Página 10 de 102

Page 11: Manual de ASP.NET

 

Compilando e rodando o programa

O código acima pode ser compilado executando pela linha de comando o compilador do C# (csc.exe) contra o arquivo (que deve ser salvo com extensão .cs), como mostrado abaixo:

csc primeiro_programa.cs

Nota: O compilador do C# pode ser encontrado no seguinte caminho:

{drive}\Windows\Microsoft.NET\Framework\{versão do .net framework}

Exemplo:

C:\Windows\Microsoft.NET\Framework\v4.0.30319

Para poder compilar um código direto da linha de comando, deve ser verificado se as ferramentas de linha de comando do .NET foram instaladas no sistema.

Depois de compilado será gerado um arquivo .exe que pode ser executado da linha de comando ou através do Windows Explorer como qualquer outro executável.

A saída do programa (considerando que o usuário se chama João) será a seguir:

C# e sua sintaxe

Vamos observar alguns detalhes sobre a sintaxe do C#. Como em outras linguagens, linhas de comando no C# são terminadas com ponto e vírgula, e podem continuar em múltiplas linhas sem necessidade de um caractere para informar essas continuações, como vemos a seguir:

Página 11 de 102

Page 12: Manual de ASP.NET

Para comentar uma linha basta utilizar duas barras (//). Para várias linhas deve ser iniciado com barra e asterisco ( /*) e terminar com a mesma combinação ao contrário ( */):

Saiba mais: Comentários com XML

http://msdn.microsoft.com/pt-br/library/vstudio/b2s063f7.aspx

Página 12 de 102

Page 13: Manual de ASP.NET

Todos esses aspectos mostram as similaridades do C# com o C++ e o Java.

As primeiras linhas do código anterior começam com a utilização de namespaces, um recurso utilizado para agrupar classes que têm responsabilidades similares. Os namespaces do C# são equivalentes aos namespaces do C++ e os packages do Java. A palavra chave namespace seguida de chaves declara em qual namespace uma classe está contida.

A palavra chave using informa ao compilador em qual namespace deve ser procurado para encontrar classes que foram referenciadas em seu código mas não foram definidas no mesmo namespace. Using no C# é equivalente à palavra chave import do Java e using namespace do C++.

Veremos no código abaixo outra utilização dos namespaces:

Nó código acima foi adicionado uma instrução using pois foi referenciada uma classe contida no namespace System. Vale ressaltar que a maioria das operações efetuadas  no C# dependem das classes bases do .NET. Nesse caso, foi utilizada a classe Console para imprimir uma mensagem na linha de comando. O C# não tem nenhum comando para efetuar essa operação.

Como a maioria dos programas em C# utilizam classes e outros elementos do namespace System, é uma boa prática adicionar uma instrução using para esse namespace em todos os arquivos.

Depois disso foi definido uma classe chamada Program, como ela foi definida no namespace ConsoleApplication1, é correto afirmar que seu nome completo é ConsoleApplication1.Program.

Classes

Como no Java, tudo no C# deve estar contido em uma classe. Classes no C# são similares a classes no Java e C++. A declaração da classe se dá com a palavra chave class, seguida do nome da classe e das

Página 13 de 102

Page 14: Manual de ASP.NET

chaves. Todo código referente associado a classe deve estar dentro das chaves, como mostrado no exemplo abaixo:

No exemplo anterior foi declarado um método chamado Main. Todo executável desenvolvido em C# (Console, Windows) deve ter um ponto de partida. Esse é o papel do método Main, ser o primeiro método a ser executado ao abrir o executável.

Um método no C# tem o seguinte formato:

Saiba mais: Orientação a Objetos com C#

http://msdn.microsoft.com/pt-br/library/cc580626.aspx

Por Exemplo:

Primeiro devem ser definidos os modificadores do método que servem para especificar o nível de acesso do método. No exemplo anterior foram utilizadas as palavras chaves public e static. A palavra chave public define que o método pode ser chamado de qualquer lugar, inclusive fora da classe que foi definido. Já a palavra chave static indica que o método não poderá ser invocado de um objeto (instância da classe) e sim diretamente da classe. Logo depois

Página 14 de 102

Page 15: Manual de ASP.NET

deve ser definido o tipo de retorno do método, no caso void para informar que o método não retornará nada. No exemplo, o método não recebe parâmetros. Por fim, são definidas as instruções do método:

A instrução acima declara uma variável do tipo int chamada x. Deve ser observado que o compilador não deixará essa variável ser utilizada a não ser que ela seja inicializada.

Assim que declarada, pode ser inicializada utilizando o operador de atribuição igual ( = ):

x = 20;

Também é possível declarar e inicializar uma variável ao mesmo tempo:

int x = 20;

Se várias variáveis são declaras e inicializadas ao mesmo tempo, todas as variáveis serão consideradas do mesmo tipo:

Int x = 50, y = 100;

No exemplo anterior as duas variáveis serão do tipo int.

Não é possível declarar variáveis de diferentes tipos ao mesmo tempo:

int x = 20;

bool y = false;

int x = 10, bool y = false; // não compilará

A inicialização de variáveis mostra o nível de segurança do C#. Nenhuma variável pode ser utilizada sem primeiro ser inicializada. Em algumas linguagens o compilador mostraria apenas uma mensagem de alerta, mas o compilador do C# trata essa situação como um erro. Isso previne a leitura de lixo em memória deixado por outros programas.

Página 15 de 102

Page 16: Manual de ASP.NET

O C# utilizada dois diferentes métodos para assegurar que variáveis sempre serão inicializadas antes de serem utilizadas:

Variáveis que são definidas como atributos em classes e estruturas, se não inicializadas explicitamente, são automaticamente inicializadas com valores padrões do tipo que foram declaradas no momento que são criadas.

Variáveis locais de um método devem ser explicitamente inicializadas antes de qualquer instrução que irá utilizar o valor da variável. A inicialização não precisa ser feita no momento da declaração da variável, mas o compilador verificará todos os caminhos possíveis do método e gerará um erro caso o valor da variável esteja sendo acessado sem ser inicializado previamente.

Vídeo:  Variáveis no C#

https://www.youtube.com/watch?v=0dVOVeT0rTg

O código abaixo ilustra as afirmações sobre inicialização de variáveis:

Ao compilar o código acima, será gerado o seguinte erro:

Página 16 de 102

Page 17: Manual de ASP.NET

O erro informa que a variável maiorIdade está sendo utilizada sem ser inicializada, isso porque caso a idade digitada seja menor que 18 nenhum valor será atribuído à variável, e não haverá um valor para ser testado na instrução if.

Considere a seguinte instrução:

Pessoa objeto;

No C# essa linha de código declara uma variável que pode apontar para um objeto do tipo Pessoa, mas o objeto ainda não foi criado, logo a variável não aponta para nada. Qualquer chamada para um método ou propriedade a partir dessa variável irá gerar um erro.

Para instanciar um objeto no C# deve ser utilizada a palavra chave new. Primeiro é criada a variável como no exemplo anterior e logo em seguida é instanciado um objeto;

No final fica assim: Pessoa objeto = new Pessoa();

FÓRUM:

Com o conhecimento adquirido sobre a plataforma .NET e a linguagem C#, cite as vantagens que você identificou ao utilizar essa tecnologia.

RESUMO:

Vimos nesta unidade algumas das tecnologias que compreendem o .NET Framework, seu padrão de funcionamento junto ao sistema operacional e os diversos tipos de arquiteturas possíveis para serem trabalhadas, como Windows e Web, além do ambiente de

Página 17 de 102

Page 18: Manual de ASP.NET

desenvolvimento Visual Studio. Também foi apresentada a linguagem C#, sua sintaxe e suas similaridades com as linguagens Java e C++.

 

 

INTRODUCTION to the C# Language and the .NET Framework2013. Disponível em: < http://msdn.microsoft.com/en-us/library/z1zx9t92.aspx >. Acesso em: 21 fev. 2013.

TIPOS de dados (guia de programação). 2013. Disponível em: < http://msdn.microsoft.com/pt-br/library/ms173104%28v=vs.80%29.aspx >. Acesso em: 28 jan. 2013.

APLLICATTION development in visual studio. 2013. Disponível em: < http://msdn.microsoft.com/en-us/library/vstudio/h8w79z10.aspx >. Acesso em: 28 fev. 2013.

 

SUGESTÃO DE LEITURA

SHARP, John. Visual C# 2008 - passo a passo. Porto Alegre: Bookman, 2008.

LOUREIRO, Henrique. C# 4.0 com visual studio 2010. Lisboa: FCA, 2011.

MSDN. .NET framework application essentials. Disponível em: < http://msdn.microsoft.com/en-US/library/vstudio/ms172157 >. Acesso em: nov. 2012.

MSDN. Introduction to the C# language and the .NET Framework. Disponível em: < http://msdn.microsoft.com/library/vstudio/z1zx9t92 >. Acesso em: nov. 2012.

Unidade 1 – Linguagem C# Avançado

Página 18 de 102

Page 19: Manual de ASP.NET

Inferência de tipo

Inferência de tipo é utilizada para omitir o tipo da variável no momento da declaração. Para utilizar esse recurso no C# é utilizada a palavra chave var. O compilador irá descobrir o tipo da variável a partir do momento da inicialização, por exemplo:

var x = 2;

irá se tornar:

int x = 2;

Saiba mais: A lógica da Inferência

http://pt.wikipedia.org/wiki/Infer%C3%AAncia

Depois de compilado, as duas instruções são iguais.

Veja mais um exemplo:

Apenas deve ser atentando para algumas regras. A variável deve ser sempre inicializada no momento da declaração. De outra forma, o compilador não saberia definir o tipo da variável. O valor inicializado não pode ser null como visto abaixo:

Página 19 de 102

Page 20: Manual de ASP.NET

Uma vez declarada e inicializada, o tipo da variável não pode ser alterado. Diferente do tipo Variant do Visual Basic, a palavra chave var irá apenas retirar a responsabilidade do desenvolvedor de digitar o tipo da variável.

Considere o código:

Vídeo: Introdução ao Visual Basic .NET

O código acima irá gerar o seguinte erro:

Página 20 de 102

Page 21: Manual de ASP.NET

O erro informa que não é possível converter implicitamente o tipo string para int, isso porque a variável x foi inicializada com o valor 2, o compilador inferiu o tipo int para esta variável, logo não é possível guardar um valor do tipo string.

Escopo de Variáveis

O escopo de uma variável é o local do código onde uma variável pode ser acessada. No geral, o escopo é determinado pelas seguintes regras:

Um campo ( variável declarada como membro de classe ) é acessível dentro de qualquer local da classe;

Uma variável local de um método é acessível apenas no escopo do método em que foi declarada, assim que o método termina sua execução a variável é eliminada;

Uma variável local declarada dentro de qualquer estrutura de repetição (while, for) é acessível apenas no escopo do loop.

Problemas de escopo em variáveis locais

É comum programas utilizarem o mesmo nome de variável em diferentes partes do mesmo. Não existe nenhum problema nesse procedimento se as variáveis forem criadas em diferentes escopos para que não haja a possibilidade de ambiguidade. O mais importante é ter em mente que duas variáveis com o mesmo nome não podem estar no mesmo escopo, como mostrado no exemplo abaixo:

Página 21 de 102

Page 22: Manual de ASP.NET

O código acima simplesmente imprime na tela os números de 0 a 9, e depois os mesmos números de 9 a 0, utilizando duas estruturas de repetição for. É importante notar que a variável i foi declarada duas vezes no mesmo método. Isso é perfeitamente possível porque a variável i foi declarada em estruturas de repetição diferentes, logo são variáveis locais dos loops.

Vejamos outro exemplo:

Se tentarmos compilar o código acima, teremos o seguinte erro:

A local variable named 'j' cannot be declared in this scope because it would give a different meaning to 'j', which is already used in a 'parent or current' scope to denote something else

Página 22 de 102

Page 23: Manual de ASP.NET

Isso ocorre porque a variável “J” foi declarada antes do bloco for, no escopo do método Main, e só será eliminada quando o método terminar. A segunda declaração de J está errada, pois o bloco for está contido no método, dessa forma uma variável J já existe no escopo e não pode ser declarada novamente.

Problemas de escopo entre variáveis locais e campos

Em algumas situações é possível distinguir duas variáveis com o mesmo nome no mesmo escopo. Nesse caso o compilador permitirá a criação da segunda variável com o mesmo nome. Isso porque o C# consegue diferenciar variáveis locais (variáveis declaradas dentro de métodos) de campos ( variáveis declaradas a nível de classe ).

Consideremos o seguinte código:

Saiba como encontrar erros através do Visual Studio:

http://msdn.microsoft.com/pt-br/library/vstudio/sc65sadd.aspx

O código acima irá compilar mesmo tendo duas variáveis J no escopo do método Main. Note que a primeira variável J foi declarada a nível de classe e só será eliminada quando a classe for destruída ( quando o método Main terminar sua execução e o programa terminar ). No exemplo, a variável J declarada dentro do método Main esconde a variável declarada a nível de classe, e a saída do programa será o número 50.

Mas e se precisarmos acessar a variável declarada no nível de classe? Nesse caso é necessário utilizar o nome da classe para informarmos ao compilador que a variável que será acessada está declarada a nível de classe, como mostrado no código a seguir:

Página 23 de 102

Page 24: Manual de ASP.NET

A saída do programa será o número 20.

Constantes

Como o próprio nome diz, uma constante é uma variável cujo valor não pode ser alterado durante seu ciclo de vida. Para declarar uma constante basta utilizar a palavra chave “const” na declaração da variável. Uma constante sempre deve ser inicializada no momento de sua criação:

const int a = 100;

Constantes tem as seguintes características:

Devem ser inicializadas no momento da declaração e seu valor não pode ser alterado;

O valor de uma constante deve ser computado em nível de compilação, isso quer dizer que não é permitido inicializar uma constante com o valor de uma variável;

Constantes são implicitamente estáticas e não é permitido utilizar a palavra chave static em sua declaração;

Existem pelo menos 2 vantagens na utilização de constantes em um programa:

Constantes ajudam a evitar erros. Se em algum local do programa houver a tentativa de alteração do valor inicializado na constante o compilador apresentará um erro, não permitindo tal ação.

Constantes tornam os programas mais flexíveis para alteração, pois vários locais do programa podem acessá-las, e uma simples alteração em seu valor pode alterar o comportamento do programa inteiro, poupando tempo e evitando inconsistências em sua modificação.

Página 24 de 102

Page 25: Manual de ASP.NET

VÍDEO AULA 04

Tipos de dados pré-definidos no C#

Agora que conhecemos variáveis e constantes, veremos melhor os tipos de dados disponíveis no C#. Notaremos que o C# é muito mais rígido quanto à utilização de tipos do que outras linguagens de programação.

Tipos por Valor e Tipos por Referência

Antes de descobrir os tipos de dados disponíveis no C#, é importante entender que o C# contém duas categorias de tipos de dados:

Tipos por Valor Tipos por Referência

A principal diferença entre as 2 categorias é que os tipos por valor guardam o valor diretamente, enquanto os tipos por referência guardam uma referência para onde o valor está alocado. Tipos de dados que trabalham por valor no C# são basicamente os tipos menos complexos, como o int, float e bool.

Considere as variáveis abaixo:

int i = 123;

string s = “olá mundo”;

Em memória, a representação das variáveis acima funciona dessa forma:

Ou seja, i guarda o valor no próprio local de memória, já s aponta para outro local de memória que contém o valor.

Tipos por valor são alocados em um local de memória chamado  de stack, e os tipos por referência são alocados noheap. É importante saber quando um tipo trabalha por valor ou por referência pela diferença presente na atribuição de cada uma dessas categorias. Por exemplo, int é um tipo por valor, isso quer dizer que o código abaixo irá resultar em dois locais de memória alocando o valor 50:

int i = 50;

int j = i;

Saiba o que são ponteiros na programação:

Página 25 de 102

Page 26: Manual de ASP.NET

http://pt.wikipedia.org/wiki/Ponteiro_%28programa%C3%A7%C3%A3o%29

Porém, considere o código abaixo:

   

O código instância um objeto da classe Coordenada. É importante entender que toda classe no C# é um tipo que trabalha por referência. No código acima apenas um objeto do tipo Coordenada foi criado. As duas variáveis obj e obj2 apontam para o mesmo local em memória onde está alocado o objeto. Como obj e obj2 são variáveis de um tipo que trabalha por referência, a declaração das mesmas não cria um novo objeto, apenas permite apontar para um objeto do tipo Coordenada. Para criar um objeto é necessário utilizar a palavra chave new. Como obj e obj2 apontam para o mesmo objeto, qualquer alteração feita em obj irá alterar obj2, e vice-versa.

Seguindo o comportamento descrito, o código mostrado anteriormente retornará os valores 30 e 50 respectivamente.

Quando uma variável é de um tipo que trabalha por referência é possível indicar que ela não aponta para nenhum objeto atribuindo o valor null:

Coordenada x = null;

Qualquer acesso a um membro do tipo Coordenada pela variável acima irá gerar uma exceção em tempo de execução.

O CLR implementa um algoritmo para identificar se um objeto contém referências para o mesmo. Caso não exista nenhuma variável apontando para o objeto ele é destruído e a memória alocada é liberada para uso novamente. Essa tarefa é executada por um mecanismo chamado Garbage Collector.

O C# foi arquitetado dessa forma pois tipos primitivos simples como o int e bool têm uma melhor performance trabalhando por valor. Já tipos complexos que podem conter vários campos, como as classes, têm um melhor desempenho trabalhando por referência.

Tipos por Valor pré-definidos

Como mencionado na unidade 1, os tipos de dados básicos pré-definidos reconhecidos pelo C# não são exatamente da linguagem, mas sim do .net Framework. Por exemplo, quando declaramos um int

Página 26 de 102

Page 27: Manual de ASP.NET

no C#, na verdade estamos criando uma instância da struct System.Int32 definidos pelo CTS.

Veremos a seguir uma tabela de mapeamento dos tipos por valor do C# para os tipos por valor definidos no .net Framework:

Tipos por Referência pré-definidos

O C# contém dois tipos de dados pré-definidos que trabalham por referência, object e string como descrito na tabela abaixo:

 

O tipo object

Muitas linguagens de programação e hierarquia de classes contêm um tipo base, cujo todos os outros tipos de dados derivam. O C# não é exceção. No C# o tipo object é o tipo base para todos os outros tipos de dados definidos na linguagem, pré-definidos ou criados pelo usuário. Isso quer dizer que o tipo object pode ser utilizado para algumas situações:

Para apontar para objetos de qualquer tipo de dados, por exemplo, é possível empacotar um objeto que trabalha por valor para movê-lo do stack para o heap;

Útil para trabalhar com reflexão, técnica utilizada quando precisamos trabalhar com objetos de tipos desconhecidos;

O tipo object implementa alguns métodos básicos, como o Equals, GetType e ToString, uteis em diversas situações e disponíveis para todos os objetos no C#.

Considere o código abaixo:

Página 27 de 102

Page 28: Manual de ASP.NET

   

Vídeo: Tipo Object

https://www.youtube.com/watch?v=KFE66HfPUFk&feature=youtu.be

 

Note que foram atribuídos valores do tipo int, string e DateTime em variáveis do tipo object, isso é perfeitamente possível pois todos os tipos no C# herdam de object.

O tipo string

A palavra chave string no C# é mapeada para o tipo System.String do .net Framework. Esse é um tipo de dados muito flexível em sua utilização, operações como concatenação e cópia são efetuadas naturalmente.

Apesar da forma de atribuição, string é um tipo que trabalha por referência. Internamente o tipo string é alocado no heap, e não no stack, e quando uma variável string é atribuída a outra são criadas duas referências para o mesmo objeto. Apesar de ser um tipo por referência, a string tem alguns comportamentos diferentes dos outros tipos que pertencem a essa categoria. Por exemplo, quando uma string é modificada é criado um novo objeto para representar essa string, deixando a primeira string intacta.

Considere o seguinte código

Página 28 de 102

Page 29: Manual de ASP.NET

Vídeo: Concatenação de Strings

http://youtu.be/ZcU56qW8M4U

A saída desse programa será:

Alterar o valor da variável z1 não tem nenhum efeito na variável z2, ao contrário do que seria esperado de um tipo que trabalha por referência. O que aconteceu foi que ao atribuir o valor “isso é uma string” na variável z1, um novo objeto foi criado. Quando z2 foi inicializada com o valor de z1, uma referência ao mesmo objeto apontado por z1 foi passada para z2. Quando o valor da variável z1 foi alterado, ao contrário de alterar a string original, um novo objeto foi criado e alocado no heap para o novo valor, e a referência de z1 foi alterada para apontar para esse novo objeto. z2 continuou  apontando para a string original.

Literais do tipo string são criados utilizando aspas duplas (“ “), o uso de aspas simples (‘ ‘) no C# é utilizado para criar literais do tipo char e causam erro em tempo de compilação se tentarem ser atribuídas a variáveis do tipo string:

Estruturas Condicionais

Estruturas condicionais permitem que um bloco de código seja executado apenas se uma ou várias condições forem atendidas. O C# tem duas estruturas para trabalhar com condições, a estrutura if, que permite testar se uma condição específica foi atendida, e o bloco switch, que permite testar uma expressão com um diferente número de valores.

Estrutura condicional if

Página 29 de 102

Page 30: Manual de ASP.NET

O C# herdou a construção if...else do C e C++. A sintaxe dessa estrutura é muita intuitiva para qualquer desenvolvedor que já tenha programado com uma linguagem procedural:

Se apenas uma instrução será executada em qualquer uma das partes condicionais, as chaves não são necessárias.

Se necessário, um bloco if pode não ter uma bloco else. Também é permitido combinar cláusulas else if para testar múltiplas condições:

Exemplo:

Página 30 de 102

Page 31: Manual de ASP.NET

Não há limite para o número de else if adicionadas a um bloco if

Estrutura condicional switch

A estrutura switch..case é familiar para programadores C++ e Java. É muito útil para comparar um argumento com várias opções.

Para criar o bloco é necessário passar um argumento para o switch seguido de uma série de cláusulas case. Quando a expressão da cláusula switch encontra o respectivo case o código segue imediatamente para aquele case. Para cada case deve haver a instrução break para que o bloco pare de ser executado. Também é possível utilizar um case padrão caso nenhum deles seja executado.

O exemplo a seguir testa o valor da variável x:

Página 31 de 102

Page 32: Manual de ASP.NET

Note que os valores dos blocos case são constantes, variáveis não são permitidas.

 

Estruturas de repetição

O C# disponibiliza quatro estruturas de repetição ( for, foreach, while, do...while) que permitem executar um bloco de código quantas vezes for preciso até uma certa condição ser em encontrada. O for, while e do...while são basicamente iguais aos encontrados no c++.

 

Estrutura de repetição for

O for é um mecanismo para iterar sobre um loop onde é testado se uma condição ainda é válida para poder ser executado novamente.  A sintaxe é a seguinte:

Página 32 de 102

Page 33: Manual de ASP.NET

For(inicializador; condição; iterador)

            Instruções

Onde:

O inicializador é uma expressão a ser executada antes do loop iniciar ( geralmente iniciando uma variável para servir como contador);

A condição é a expressão a ser testada em cada iteração antes do loop ser executado;

O iterador é uma expressão a ser executada depois de cada iteração ( geralmente é um incremento do contador).

A iteração termina quando a expressão retorna false.

O for é um excelente loop para repetir um bloco de código em um determinado número de vezes. O exemplo seguinte mostra um uso típico de um bloco for, imprimindo na tela todos os números de 0 a 99:

Vídeo: ‘foreach’, uma alternativa ao ‘for’:

https://www.youtube.com/watch?v=Ys3_QVaAP5w

No exemplo acima foi declarada uma variável i do tipo int e inicializada com o valor 0. Essa variável será utilizada como contador para o loop. A condição testa se o contador é menor que 100. Essa condição retornará true enquanto o contador for menor que 100. O contador é incrementado em cada iteração.

O exemplo retornará o seguinte resultado:

0   1   2   3   4   5    6   7   8   9 10 11 12 13 14 15 16 17 18 19

20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59

60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79

80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99

Estrutura de repetição while

Página 33 de 102

Page 34: Manual de ASP.NET

A estrutura de repetição while é idêntica ao while do C++ e Java. O while tem uma sintaxe mais simples que o for pois é necessário apenas uma expressão para utilizá-lo:

While(condição)         Instruções

Diferente da estrutura for, o while é geralmente utilizado para repetir um bloco de código por um número de vezes desconhecido no momento que o loop começa. Uma variável de controle é utilizada e alterada no interior da estrutura para que a iteração termine:

 

Estrutura de repetição do... while

O do...while funciona como o while, mas sua condição de parada é testada depois do loop ser executado. Isso quer dizer que o bloco de código será executado pelo menos uma vez:

Página 34 de 102

Page 35: Manual de ASP.NET

Estrutura de repetição foreach

O foreach é uma estrutura que itera sobre cada objeto de uma coleção, não sendo necessário trabalhar com índices. Para que a estrutura foreach consiga trabalhar com uma coleção ela deve implementar a interface IEnumerable. Como exemplos de coleções no C# podemos citar arrays, as classes do namespace System.Collection e coleções criadas pelo usuário.

Considere o seguinte código:

Página 35 de 102

Page 36: Manual de ASP.NET

Saiba mais: O que são Interfaces

http://www.linhadecodigo.com.br/artigo/2999/entendendo-interfaces-com-csharp.aspx

O exemplo mostra uma iteração em um vetor de string utilizando a estrutura foreach. Cada vez que é executado o loop a variável x é alterada para conter um elemento do vetor.

A inferência de tipo é muito utilizada em estruturas foreach:

A variável x será do tipo string pois o foreach está iterando sobre um vetor de strings.

Um ponto importante que deve ser lembrado é que os itens da coleção não podem ser modificados dentro de uma estrutura foreach:

Página 36 de 102

Page 37: Manual de ASP.NET

O código mostrado não irá compilar, pois x não pode ser modificado.

 

FÓRUM:

Como vimos nesta unidade a linguagem C# tem duas formas básicas de tipos de dados, por valor e referência. Em sua opinião qual o cenário ideal para utilizar cada um desses tipos?

RESUMO:

Nesta unidade foram apresentados conceitos primordiais para desenvolver aplicativos utilizando todas as vantagens que a linguagem C# pode proporcionar. Vimos que existem diferenças na escolha do tipo de dados e como esses tipos são gerenciados em memória. Também foram mostradas as estruturas de repetição e condicionais disponíveis na linguagem, sua sintaxe e suas similaridades com a linguagem C.

BUILT-in types table (C# reference). 2013. Disponível em: < http://msdn.microsoft.com/en-us/library/ya5y69ds.aspx >. Acesso em: 28 fev. 2013.

 

SUGESTÕES DE LEITURA

SHARP, John. Visual C# 2008 - passo a passo. Porto Alegre: Bookman, 2008.

LOUREIRO, Henrique. C# 4.0 com visual studio 2010. Lisboa: FCA, 2011.

Página 37 de 102

Page 38: Manual de ASP.NET

MSDN. .NET framework application essentials. Disponível em: < http://msdn.microsoft.com/en-US/library/vstudio/ms172157 >. Acesso em: nov. 2012.

MSDN. Introduction to the C# language and the .NET Framework. Disponível em: < http://msdn.microsoft.com/library/vstudio/z1zx9t92 >. Acesso em: nov. 2012.

Unidade 2 – Introdução ao ASP.NET

VÍDEO AULA 01

Visão geral de uma aplicação WEB

Para começar a criar uma aplicação WEB primeiro devem estar claros três importantes tópicos:

Como funciona uma requisição HTTP;

O que é o HTML e como ele funciona;

Como as requisições HTTP são tratadas pelo IIS, o servidor WEB da Microsoft;

Mesmo com o ASP.NET facilitando a vida do desenvolvedor como nunca foi antes, entender os mecanismos citados é muito importante para aproveitar ao máximo cada mecanismo do desenvolvimento para Internet.

 

Requisições HTTP

O protocolo de comunicação utilizado pelos browsers para se comunicar com qualquer site é chamado de Hypertext Transfer Protocol (HTTP).

O HTTP permite que um cliente (navegador) requisite uma página para o servidor utilizando métodos específicos para cada situação. Entre os mais importantes estão os métodos GET e POST.

Página 38 de 102

Page 39: Manual de ASP.NET

A URL (Uniform Resource Locator) acima é utilizada para recuperar os dados do produto cujo identificador é o 5. Quando os parâmetros de uma requisição são enviados na URL, como acontece com o código no caso acima, é utilizada uma requisição do tipo GET. Quando uma requisição pode ser executada várias vezes (vários usuários irão acessar essa mesma página) é recomendado que se use o método GET.

O método POST é recomendado para ser utilizado em formulários HTML como, por exemplo, na inserção de uma nova notícia em uma página. Como essa operação irá alterar o estado de um recurso no servidor deve ser evitado utilizar o método GET, pois essa operação poderia ser executada facilmente pela URL, o que poderia causar falhas de segurança. Também deve ser observado que uma requisição feita utilizando o método POST não altera o formato da URL, pois os parâmetros são enviados no corpo da requisição HTTP.

 

Hypertext Markup Language

O HTML é uma linguagem de marcação utilizada para formatar documentos, e todos os navegadores conseguem interpretar HTML.

A primeira versão do HTML utilizada em grande escala foi a versão 2.0. A versão 3.2 introduziu novos recursos como as tabelas e applets. Atualmente o HTML se encontra na versão 5 e promete revolucionar a forma como documentos são apresentados na WEB, incluindo suporte nativo para áudio, vídeo e outros recursos.

Ao trabalhar com ASP.NET veremos que ele gera a maior parte do código HTML que teríamos que criar manualmente, mas é importante entender como funciona o HTML para ter um maior domínio sobre a página gerada.

Por exemplo, o código HTML a seguir renderiza uma página com uma lista de opções e um botão:

Página 39 de 102

Page 40: Manual de ASP.NET

A figura abaixo mostra a página renderizada pelo navegador:

Vídeo: Introdução ao HTML 5

http://youtu.be/CHlp835aYz0

 

Internet Information Services (IIS)

No geral toda arquitetura voltada para aplicações WEB funciona da mesma forma. Não importa que hardware ou software seja utilizado, sempre será necessário algum software no servidor monitorando a porta 80 para recuperar as requisições feitas pelo cliente. Quando uma requisição é detectada, é trabalho do servidor responder da forma esperada.

No Windows o servidor responsável por receber requisições é o IIS, apesar de inicialmente não ser importante conhecê-lo a fundo, é interessante saber como ele funciona para fins de debug, testes e publicação das aplicações desenvolvidas em ASP.NET.

Página 40 de 102

Page 41: Manual de ASP.NET

Para entender o papel do IIS, veremos a seguir como funciona uma arquitetura cliente-servidor:

Inicialmente a máquina cliente faz uma requisição para o servidor web pedindo o recurso clientes.aspx. O IIS juntamente com o módulo do ASP.NET interpreta a página e responde HTML para o cliente, a linguagem que o navegador consegue interpretar.

Isso mostra que qualquer página desenvolvida em ASP.NET não será executada no lado cliente, pois o navegador não consegue interpretar a página, para essa tarefa é necessário o IIS.

Introdução ao ASP.NET

O ASP.NET é o framework da Microsoft para criar aplicações para Internet. É o sucessor do antigo ASP e sua principal vantagem é ter disponível todos os recursos do .net Framework, como segurança, código gerenciado e as diversas classes já existentes.

O ASP.NET é totalmente integrado ao Visual Studio. Com isso nunca foi tão fácil desenvolver para WEB. O Visual Studio provê ferramentas de design, uma toolbox para trabalhar com controles e recursos poderosos para debug.

A seguir veremos algumas das vantagens do ASP.NET sobre o antigo ASP:

Página 41 de 102

Page 42: Manual de ASP.NET

Melhor performance: O código desenvolvido no ASP.NET é compilado pelo CLR, que fornece otimização nativa do código através de um recurso chamado Just-In-Time, que compila apenas os blocos de código necessários;

Flexibilidade: Todas as classes do .net Framework podem ser acessadas através de uma aplicação ASP.NET. Além disso, qualquer linguagem disponível no .NET pode ser utilizada;

Configuração simplificada: Toda configuração de uma aplicação em ASP.NET é guardada em formato XML, logo é muito fácil fazer alterações, como por exemplo alterar uma string de conexão.

Existem diversas formas de se criar aplicações em ASP.NET. Cada uma delas segue padrões para fins específicos, entre elas está o ASP.NET Web Forms, tecnologia que veremos a seguir.

 

ASP.NET Web Forms

O ASP.NET Web Forms é um padrão de desenvolvimento baseado em formulários. É similar ao desenvolvimento para aplicações Windows, contendo controles e tratamento de eventos, com isso o Web Forms não traz um impacto tão grande para desenvolvedores que sempre trabalharam com aplicações desktop e nunca tiveram contato com desenvolvimento para WEB.

Como vantagens do Web Forms, podemos citar:

É muito produtivo pois conta com uma grande quantidade de controles prontos para serem utilizados;

Baseado em eventos, fácil para entrada de desenvolvedores Windows;

Gera grande parte do código HTML e Javascript, tirando a responsabilidade do desenvolvedor;

Separa o código servidor do código cliente, evitando confusão na manutenção;

Contém recursos para reaproveitamento de código como Master Pages e User Controls, que serão discutidos mais a frente.

 

Criando a primeira aplicação em ASP.NET Web Forms

Vamos criar nossa primeira aplicação em ASP.NET utilizando o Visual Studio. Para todos os exemplos desta aula será utilizado o Visual Studio 2012 Express for WEB que pode ser baixado no link abaixo:

Página 42 de 102

Page 43: Manual de ASP.NET

http://www.microsoft.com/visualstudio/eng/downloads#d-express-web

Para criar um projeto abra o Visual Studio e clique no menu File > New > Project como mostrado na figura abaixo:

Em seguida deve ser selecionado o tipo do projeto. Em templates selecione a opção WEB e na direita ASP.NET Web Forms Application:

Na mesma tela também podem ser alterados o nome do projeto e da solução, e onde eles serão salvos.

Veremos a seguir alguns dos diretórios e arquivos adicionados automaticamente no projeto:

App_Data: Pasta destinada a conter arquivos de dados, como arquivos xml, txt, excel, bancos de dados, etc.

Content: Pasta que contém todos os elementos que compõe o layout de uma página, como arquivos CSS e imagens.

Images: Imagens que não fazem parte do layout das páginas e sim do conteúdo.

Scripts: Bibliotecas em são alocadas nesta pasta, como o JQuery e Modernizr.

Arquivos .aspx: páginas (web forms) adicionadas ao projeto, podem ser excluídas se necessário. ASPX é a extensão padrão de páginas ASP.NET.

Arquivos .config: Arquivos de configuração da aplicação, como pacotes de estilo e javascript que serão utilizados, strings de conexão, configurações de autenticação e outros recursos.

Página 43 de 102

Page 44: Manual de ASP.NET

Site.Master: Arquivo que representa uma Master Page, recurso utilizado para reaproveitamento de código, será abordado em detalhes posteriormente.

Saiba mais: O que é o JQuery

http://www.codigofonte.net/dicas/javascript/310_jquery-o-que-e-e-como-usar

Saiba mais: O que é o Modernizr

http://maujor.com/tutorial/css3-html5-modernizr.php

 

Criando a primeira página

Para criar uma página clique com o botão direito no nome do projeto, logo depois em Add New Item, selecione a opção Web Form. Daremos o nome de exemplo.aspx:

Dica: Caso não tenha sido dado um nome para o projeto no momento de sua criação o nome padrão será WebApplication1.

Ao adicionar o Web Form deve ser observado:

Foi adicionado um arquivo exemplo.aspx, nesse arquivo deve ser colocado apenas o código necessário para montar a apresentação de conteúdo para o usuário (basicamente HTML com algum código de servidor).

O arquivo exemplo.aspx.cs terá todo o código de servidor para tratar a requisição do usuário. Basicamente é uma classe com métodos para receber e tratar eventos.

Veremos a seguir o código adicionado no arquivo exemplo.aspx:

Página 44 de 102

Page 45: Manual de ASP.NET

No ASP.NET todo HTML que poderá ser manipulado no servidor precisa conter a propriedade runat=”server”. Deve ser observado que

Página 45 de 102

Page 46: Manual de ASP.NET

todo o conteúdo de uma página ASP.NET é contido dentro de uma

tag   com o atributo runat=”server”, ou seja, a página é um grande formulário, daí o nome Web Forms.

Vamos testar a página. Para isso clique com o botão direito na página aspx e em seguida em View in Browser.Será exibida uma página em branco. O mais importante nesse ponto é ver o código fonte da mesma:

Sobre o código:

Podemos notar que foi apenas enviado para o cliente o conteúdo estático (HTML) e nenhuma instrução de servidor. Da página aspx criada para o código fonte gerado houve apenas uma diferença, a adição de uma div identificada pela classe aspNetHidden. Esse é um recurso chamado View State muito utilizado no modelo Web Forms e será discutido em um capitulo específico.

 

Entendendo o ciclo de vida de uma página

É importante entender que, quando uma página aspx é requisitada vários processos são executados, entre eles alguns eventos e mecanismos para renderizar os controles do asp.net adicionados na página.

Para poder rastrear o que acontece com uma página quando ela é requisitada basta adicionar a propriedade Trace nas configurações da página como mostrado abaixo:

Página 46 de 102

Page 47: Manual de ASP.NET

Depois basta carregar a página e serão exibidas algumas informações como os eventos que foram executados e controles renderizados:

Tratando Eventos

Eventos são métodos especiais que são executados quando uma ação é disparada. Uma página ASP.NET pode conter quantos eventos forem necessários,

Um dos eventos mais utilizados de uma página é o Page_Load. Esse evento é executado quando uma página é requisitada e carregada.

Para entender como o evento Page_Load funciona adicione a seguinte tag em uma página aspx:

Mas e se quisermos mostrar essa informação apenas quando o usuário efetuar uma ação, como o clique de um botão?

Adicione as seguintes tags em uma página aspx:

Página 47 de 102

Page 48: Manual de ASP.NET

Entendendo o PostBack

Verificamos anteriormente que um Web Form nada mais é que um grande formulário contendo todos os elementos da página. Mas o que acontece quando um desses elementos é acionado? Por exemplo, quando um botão é pressionado?

No modelo Web Form todo controle que é adicionado na página e pode disparar um evento utiliza um recurso da arquitetura chamado PostBack. Um PostBack nada mais é que um POST para a mesma página, ou seja, uma requisição para o servidor para a mesma página em que se encontra o controle.

Veremos passo a passo como funciona esse processo:

Figura - Esquema de Postback no ASP.NET

Fonte: How... (2013)

1-  O usuário acessa a página que irá interagir;

Página 48 de 102

Page 49: Manual de ASP.NET

2-  Algum controle é utilizado. Exemplo: Um botão é clicado, um campo de texto tem o conteúdo alterado, uma linha de um componente de dados é selecionada;

3-  Um evento é disparado automaticamente (utilizando Javascript), a página é enviada para o servidor;

4-  O servidor carrega a mesma página (todo o ciclo de vida é realizado novamente) e o evento é tratado.

5-  A página é enviada para o cliente

É importante entender que nem toda requisição para o servidor é um PostBack. Quando um usuário acessa a página diretamente, ou um redirecionamento é executado, nenhuma dessas ações são consideradas PostBack.

Veremos no exemplo a seguir como descobrir se uma requisição foi efetuada através de um postback:

ASPX:

Ao executar a página com o código acima poderemos notar que apesar da data atual ser atribuída ao parágrafo “data” no evento Page_Load essa informação não é apresentada na página quando ela é carregada. Isso acontece por que foi adicionada uma estrutura

Página 49 de 102

Page 50: Manual de ASP.NET

condicional que testa se a página foi solicitada através de um PostBack ou não.

A propriedade IsPostBack é uma propriedade booleana da página que tem o propósito de informar se a página está sendo solicitada através de um PostBack. Se o acesso tiver sido realizado diretamente, ou seja, fruto de um redirecionamento a propriedade terá o valor False, caso contrário True.

Também é importante notar que no momento que o botão for pressionado o evento Page_Load será disparado antes do evento btnTestar_Click. Isso acontece porque o ciclo de vida da página é executado normalmente, não importando se é um PostBack ou não.

Mantendo o estado da página com View State

Quando uma página da web é solicitada ela é enviada para o cliente em seu estado inicial. Ao interagir com a página o usuário pode modificar o estado dela alterando algumas informações, como por exemplo, digitando dados em um formulário.

Ao enviar os dados para o servidor ele irá validar as informações e caso alguma coisa esteja incorreta a página deverá ser enviada para o cliente novamente para que corrija as informações incorretas. Mas um detalhe deve ser levado em conta, ao enviar a página para o cliente o estado da página deve ser mantido, ou seja, todos os dados que ele informou devem estar presentes na página, caso contrário o usuário terá que informar todos os dados novamente.

O ASP.NET conta com um recurso chamado de ViewState para manter o estado da página, ou seja, quando um formulário é submetido para o servidor, ele retorna para o cliente com todos os dados informados sem que nenhum esforço do programador seja necessário. Mas como isso funciona?

Considere a seguinte página:

ASPX:

Página 50 de 102

Page 51: Manual de ASP.NET

Página 51 de 102

Page 52: Manual de ASP.NET

Ao clicar no botão “Validar” com um valor inválido no TextBox ( no exemplo: NaN ) teremos o seguinte resultado:

Note que o valor do TextBox foi validado no servidor, a página foi respondida para o cliente e o valor do TextBox foi mantido. Isso acontece porque toda página em ASP.NET guarda o estado da página em um campo hidden para que os dados não sejam perdidos em cada requisição. Se observarmos o fonte da página iremos encontrar uma tag com o padrão abaixo:

View State e seu custo

Apesar do View State ser um poderoso recurso ele tem seus custos:

Em cada página visitada os dados de todos os controles são coletados e serializados em uma string codificada na base64. Quando um postback é efetuado é executado o processo inverso para resgatar as informações e atualizar os respectivos controles, gerando custo de processamento para o servidor;

O campo hidden que guarda os dados serializados gera informações extras que devem ser enviadas para o cliente. Dependendo do tamanho do View State e da conexão do cliente isso pode custar alguns segundos de download.

Saiba mais: Codificação Base64

http://pt.kioskea.net/contents/base/base64.php3

 

Redirecionamentos

Página 52 de 102

Page 53: Manual de ASP.NET

Quando falamos de redirecionamentos deve ficar claro que eles podem ser feitos em 2 locais:

1. Cliente: Através de Javascript;

2. Servidor: Pelo próprio ASP.NET

Quando um redirecionamento é executado do lado do servidor o recurso respondido não é o recurso solicitado.

Como exemplo podemos citar uma página que necessita de autenticação. Se o usuário não estiver logado o mesmo deve ser redirecionado para uma página de login. Veremos essa situação no exemplo abaixo:

CS:

No exemplo acima foi utilizada a instrução “Response.Redirect” para redirecionar o usuário para a página “login.aspx” caso o usuário não esteja logado.

É importante notar que caso o usuário requisite o endereço “restrito.aspx” ele terá como retorno a página “login.aspx”, isso porque o navegador fica ciente no redirecionamento pois o servidor retorna um status 302 ( Movido Temporariamente ) como mostrado abaixo:

Página 53 de 102

Page 54: Manual de ASP.NET

Saiba mais: Lista de códigos de status HTTP

http://pt.wikipedia.org/wiki/Anexo:Lista_de_c%C3%B3digos_de_status_HTTP

 

FÓRUM:

Em sua opinião quais são as vantagens de uma aplicação WEB sobre uma aplicação desktop?

Quais os desafios ao se construir uma aplicação para Internet, levando em consideração o tipo de arquitetura e a grande quantidade de variáveis existentes nesse tipo de aplicação?

 

RESUMO:

Apresentamos nesta unidade os processos e tecnologias envolvidas na construção de uma aplicação voltada para a Internet.

Foi introduzida a plataforma ASP.NET Web Forms, que nada mais é que um ambiente para construção de aplicações WEB, vimos que seu modelo de desenvolvimento é muito parecido com o padrão de construção de aplicações para desktop. Também conhecemos alguns recursos importantes da plataforma, como o PostBack e View State.

NETWORKS. 2013. Disponível em: < http://jdjua.com/networking.htm >. Acesso em: 28 fev. 2013.

Página 54 de 102

Page 55: Manual de ASP.NET

HOW postback events work in ASP.NET. 2013. Disponível em: < http://www.howtoasp.net/asp-net-tutorials/how-postback-events-work-in-asp-net/ >. Acesso em: 28 fev. 2013.

 

SUGESTÕES DE LEITURA

SILVA, Maurício Samy. Construindo sites com CSS e (X)HTML. São Paulo: Novatec, 2008

SHEPERD, George. Microsoft ASP.NET 4 Step by Step. Redmond: Microsoft Press, 2010

MSDN. ASP.NET Reference. Disponível em: < http://msdn.microsoft.com/pt-br/library/9k6k3k4a%28VS.85%29.aspx >. Acesso em: nov. 2012.

W3C. Architecture of the World Wide Web, Volume One. Disponível em: < http://www.w3.org/TR/2004/REC-webarch-20041215 >. Acesso em: nov. 2012

Unidade 2 – Introdução ao ASP.NET

VÍDEO AULA 03

 

ASP.NET e Banco de Dados

Uma das grandes vantagens de se trabalhar com o ASP.NET é a grande biblioteca de classes já disponíveis no momento que um projeto é iniciado, isso porque a base do ASP.NET é o .net Framework. Além de uma ampla variedade de recursos para tratar controles de entrada e saída de dados e requisições HTTP o .net Framework inclui uma biblioteca para conectar e manipular uma grande variedade de bancos de dados, chamada de ADO.NET (ActiveX Data Objects).

O ADO.NET contém classes para conectar, manipular e consumir um banco de dados de forma rápida e simples.

Existem basicamente dois namespaces que proveem acesso à base de dados no ADO.NET:

System.Data.OleDb: Permite conectar em uma grande variedade de bancos de dados.

Página 55 de 102

Page 56: Manual de ASP.NET

System.Data.SqlClient: Provedor específico para trabalhar com o banco de dados Sql Server.

Saiba mais: Visão geral do Sql Server

https://www.microsoft.com/sqlserver/pt/br/product-info/overview-capabilities.aspx

Os 2 namespaces são muito parecidos no que se referem a nomenclatura das classes e como elas deve ser utilizadas. Vejamos o esquema a seguir:

Figura - Namespaces do ADO.NET

Fonte: Adaptado de Marcorati (2013)

Podemos notar no esquema apresentado a similaridade entre as classes disponíveis para os 2 namespaces. Isso implica em uma facilidade para migrar de um namespace para outro se for necessário.

Iremos focar no namespace System.Data.SqlClient para os exemplos posteriores. Utilizaremos o banco de dados SQL Server 2008 R2 Express que pode ser baixado facilmente na página da Microsoft pelo link abaixo:

http://www.microsoft.com/pt-br/download/details.aspx?id=23650

Veremos a seguir para que servem algumas das classes mais importantes do namespace System.Data.SqlClient:

SqlConnection: É a classe responsável por gerenciar a conexão com o banco de dados. Através dessa classe é possível

Página 56 de 102

Page 57: Manual de ASP.NET

abrir, fechar e verificar o estado da conexão com o banco.

SqlCommand: Classe responsável por configurar e executar instruções SQL contra o banco.

SqlDataReader: Responsável por fornecer um mecanismo para consultar registros do banco de dados. Trabalha de forma conectada, ou seja, enquanto a leitura for necessária a conexão precisa estar aberta.

SqlDataAdapter: Representa um conjunto de comandos para trabalhar com objetos do tipo DataSet.

 

DataSet

Veja no vídeo abaixo os detalhes de como trabalhar com o DataSet:

http://youtu.be/3awsqUSN1YQ

O DataSet faz parte de um modelo do ADO.NET chamado de “Modelo Desconectado”.  O DataSet permite uma aplicação ter a representação do banco de dados em memória sem a necessidade de estar conectado. Isso quer dizer que uma aplicação pode fazer as modificações necessárias em memória para posteriormente replica-las ao banco, permitindo dessa forma que o banco tenha mais conexões disponíveis para serem utilizadas.

Veremos a seguir como trabalhar com algumas das classes descritas considerando a seguinte tabela:

Nome: tbCliente

Colunas: codigo (int), nome (varchar), cpf (varchar), dataNascimento (datetime).

O código abaixo insere um cliente na tabela:

Classe Cliente:

Página 57 de 102

Page 58: Manual de ASP.NET

Página 58 de 102

Page 59: Manual de ASP.NET

Entendendo o código:

Primeiramente foi criada uma string que contém todos os dados para abrir uma conexão, como caminho do servidor, nome do banco e opcionalmente usuário e senha. É importante notar que existem vários padrões para construção de uma string de conexão. Para saber o formato de string de conexão que deve ser utilizada para um banco específico acesse o site:

http://www.connectionstrings.com

Logo depois foi instanciado um objeto do tipo SqlConnection. Como vimos anteriormente esse objeto irá abrir a conexão com o banco de dados. O Objeto do tipo SqlCommand foi criado com a instrução SQL para persistir o cliente no banco de dados, foram utilizados parâmetros para receber os dados.

A instrução é executada através do método ExecuteNonQuery. Esse método retorna o número de linhas afetadas no banco de dados e, caso algum erro ocorra, o método Inserir retornará o valor -1.

 

Lendo dados da tabela

Página 59 de 102

Page 60: Manual de ASP.NET

Considerando a mesma tabela do exemplo anterior veremos como trazer dados do banco para a aplicação:

Página 60 de 102

Page 61: Manual de ASP.NET

Entendendo o código:

Nesse exemplo foi utilizado o método ExecuteReader que retorna um objeto do tipo SqlDataReader que permite ler dados do banco. O SqlDataReader contém um método chamado Read que retorna um valor booleano True enquanto existirem linhas para serem lidas, dessa forma podemos facilmente utilizar uma estrutura de repetição para ler todos os valores retornados pela instrução executada.

Entity Framework

Vimos anteriormente que é muito fácil trabalhar com banco de dados utilizando o ADO.NET. O problema do código anterior é que ele trabalha com dados e não com objetos.

Atualmente a maioria dos bancos utilizados comercialmente trabalha de forma relacional e seu modelo se baseia basicamente em dados distribuídos em tabelas, linhas e colunas.

O C# guarda as informações em objetos, logo para enviar esses dados para uma base relacional deve ser feito o mapeamento desses dados. Esse trabalho pode gerar muito código e custar um tempo elevado de desenvolvimento.

Para resolver esse problema surgiu o Entity Framework, responsável por fazer o mapeamento dos objetos da aplicação e enviá-los para o banco de dados, e vice-versa.

A figura abaixo mostra como o Entity Framework é estruturado:

Página 61 de 102

Page 62: Manual de ASP.NET

Figura – Arquitetura do Entity Framework

Note que nesse modelo existe uma camada entre aplicação e o ADO.NET. Essa camada é o Entity Framework que fica responsável em mapear os objetos da aplicação e enviá-los para o provedor de dados prontos para serem persistidos.

Podemos citar como principais vantagens do Entity Framework:

Permite trabalhar com dados na forma de propriedades e objetos específicos do domínio. Ex: Produtos, Clientes;

Renova o modelo conceitual permitindo consultas diretamente em entidades;

Libera as aplicações da responsabilidade de tratar código específico de uma fonte de dados particular;

Menor tempo de desenvolvimento: o framework fornece as capacidades básicas de acesso de dados para que os desenvolvedores possam se concentrar na lógica do aplicativo.

Permite fazer mapeamento para diversas bases de dados (SQLServer, Oracle, MySql…);

LINQ to Entities - Fornece suporte as consultas LINQ para consultar tipos de entidades que são definidos no modelo conceitual.

Mas o que é LINQ?

LINQ (consulta integrada à linguagem) é uma das novidades adicionada no Visual Studio 2008 e .NET Framework 3.5 que veio para aproximar o mundo dos objetos do mundo dos dados.

Página 62 de 102

Page 63: Manual de ASP.NET

Consiste na execução de “queries” semelhantes às escritas em SQL e permite consultas em coleções de objetos fortemente tipados utilizando linguagens e operadores com suporte a IntelliSense.

Vejamos o exemplo a seguir:

No exemplo acima foi utilizada uma consulta em LINQ para filtrar todos os clientes com nome iniciado pela letra J.

Vídeo: Iniciando com LINQ

http://youtu.be/h4QpwdK-aqY

 

Tratando requisições GET/POST

Como vimos anteriormente uma requisição pode enviar dados para o servidor de duas formas:

1. GET: Através da URL

2. POST: no corpo da requisição

No ASP.NET é muito simples recuperar os dados enviados para a aplicação, não importando o método que foi utilizado.

 

Capturando via método GET

Ao final da execução do exemplo acima a variável id conterá o valor “1”.

Página 63 de 102

Page 64: Manual de ASP.NET

Caso a página solicitada não informe um parâmetro com nome id, o valor da variável será null.

Mas e se a página solicitada contiver múltiplos parâmetros? Por exemplo: produtos.aspx?id=1&c=5&pagina=2? Nesse basta adicionar uma instrução para cada parâmetro, como ilustrado abaixo:

Capturando via método POST

O formulário acima irá enviar os dados para a página “default.aspx” que irá capturar as informações utilizando o seguinte código:

Página 64 de 102

Page 65: Manual de ASP.NET

Lembrando que, se algum dos inputs do formulário não definir um valor para o atributo “name”, não será possível capturar o valor desse campo no servidor:

Recursos para Layout

Vamos ver em seguida alguns recursos poderosos disponíveis no ASP.NET para aproveitamento e customização de Layouts: Master Pages, User Controls e Temas.

Master Pages

A maioria dos sites da web trabalha com uma estrutura padrão que é utilizada para todas as páginas, sendo assim apenas o espaço para informações é alterado dependendo da seção acessada.

Considere o site abaixo: http://www.freewebsitetemplates.com/preview/skitemplate/

Página 65 de 102

Page 66: Manual de ASP.NET

Analisando o site apresentado podemos perceber que ele contém partes que serão repetidas em várias páginas, como o topo, menu e rodapé.

Copiar e colar esses elementos em todas as seções do site seria uma estratégia ruim, pois a manutenção se tornaria praticamente impraticável.

Para resolver esse problema o ASP.NET contém um recurso chamado Master Page. Uma Master Page é uma página que contém os elementos que estarão presentes em todas as seções do site, dessa forma esses elementos estarão centralizados em apenas um arquivo, tornando o processo de alteração simples e rápido.

Vídeo: Trabalhando com Master Pages

http://youtu.be/_AN18ubz-xo

User Controls

Como vimos a Master Page é um recurso poderoso para evitar repetição de código em um projeto, mas ela não é ideal para todos os cenários, como por exemplo reaproveitamento de funcionalidades em sites diferentes.

Vamos tomar como exemplo o calendário abaixo:

Página 66 de 102

Page 67: Manual de ASP.NET

Um calendário pode ser útil em sites de diversos setores, como sites que precisam controlar eventos e sites educacionais.

O ASP.NET dispõe de um recurso chamada User Control para permitir a criação de controles com funcionalidades que podem ser utilizadas em mais de um projeto, permitindo assim criar uma “ToolBox” com controles personalizados pelo usuário.

Um User Control é um arquivo “.ascx” que contém a seguinte diretiva:

Saiba mais: Conceitos e Exemplo Prático: User Control

http://programandodotnet.wordpress.com/2010/11/12/conceitos-e-exemplo-pratico-user-control

Temas

Temas são uma coleção de estilos que podem ser aplicados em controles ou até mesmo em todas as páginas de um site. A grande vantagem de se utilizar Temas é a possibilidade de centralizar

Página 67 de 102

Page 68: Manual de ASP.NET

códigos voltados à aparência em apenas um local, tornando rápido o processo de alteração.

Dentro de um projeto um Tema nada mais é que uma pasta especial do ASP.NET. É importante lembrar que o nome da pasta será o nome do Tema. Para criar um Tema basta clicar com o botão direito no projeto e acessar o menu: Add -> Add ASP.NET Folder -> Theme como mostrado abaixo:

Temas podem conter vários tipos de arquivos para modificar a aparência de elementos da página, entre eles arquivos .css e .skin.

 

Arquivos CSS

Um arquivo .css (Cascading Style Sheets) adicionado dentro de uma pasta Tema será aplicado ao escopo definido para o Tema.

Considere a seguinte regra CSS:

Todas as páginas dentro do escopo do Tema acima terão a cor de fundo amarelo e as outras regas aplicadas.

Arquivos SKIN

Um arquivo .skin nada mais é que um conjunto de definições que serão aplicados a controles do ASP.NET, por exemplo:

Página 68 de 102

Page 69: Manual de ASP.NET

O código acima define que todo controle “

Também é possível definir estilos em um arquivo skin da seguinte forma:

Dessa forma apenas os controles “

Escopo

Temas podem ser aplicados em basicamente 2 escopos: Global e Página

Global

Um Tema global irá modificar a aparência de todas as páginas e controles de um site. Para aplicar um tema globalmente deve ser inserida a seguinte configuração na seção System.Web do arquivo Web.config:

Página

Para identificar que uma página em específico irá utilizar um tema basta adicionar a propriedade Theme na diretiva do Web Form:

Dessa forma apenas a página WebForm1 terá o tema aplicado.

 

Internacionalização

Ao criar um site devemos nos preocupar em conseguir atender o máximo de usuário possível e uma forma de alcançar esse objetivo é disponibilizar as páginas no idioma dos visitantes.

Uma forma muito utilizada é criar uma página para cada idioma em que queremos disponibilizar conteúdo, mas esse processo é demorado e consequentemente custoso. Além disso torna difícil o processo de manutenção.

O ASP.NET permite criar arquivos especiais para guardar dados em idiomas diferentes, em cada requisição do usuário o ASP.NET verifica a preferência do visitante baseado em seu navegador e apresenta os dados no idioma correto.

Arquivos Resource

Página 69 de 102

Page 70: Manual de ASP.NET

Um arquivo Resource é um arquivo XML que contém chaves e valores em diferentes idiomas. Para cada idioma é criado um arquivo Resource com as mesmas chaves, mas valores diferentes como mostrado abaixo:

Arquivos Resource tem a extensão .resx e devem ser nomeados de acordo com o idioma que o arquivo representa, como mostrado abaixo:

MeuResource.resx – Arquivo padrãoMeuResource.pt-BR.resx – Português – BrasilMeuResource.en-uS.resx – Inglês – Estados UnidosMeuResource.en.resx – Inglês

Note que o primeiro arquivo não tem nenhuma definição de idioma, isso porque caso o usuário acesse o site com uma configuração de idioma que não esteja na lista (como Espanhol) o arquivo padrão será escolhido.

Note que é possível criar arquivos de idiomas específicos para certas regiões como no caso do “Inglês – Estados Unidos” ou apenas para o idioma.

Para uma lista completa de idiomas acesse o link abaixo:

http://www.csharp-examples.net/culture-names/

Arquivos Resource podem ser adicionados em duas pastas: App_GlobalResources e App_LocalResources como ilustrado abaixo:

Página 70 de 102

Page 71: Manual de ASP.NET

 

Local Resources

Um Local Resource é um arquivo que pode ser utilizado em apenas uma página ASP.NET e deve ser associado ao Web Form da seguinte forma:

Web Form: default.aspx

Resources:

default.aspx.en.resx -> Inglêsdefault.aspx.pt-br.resx -> Português – Brasil

Para utilizar na página basta utilizar a sintaxe:

 

Global Resources

Podem conter qualquer nome seguindo o padrão mostrado anteriormente e podem ser utilizados em qualquer página da aplicação. Segue um exemplo de utilização:

Saiba mais: Lendo resources automaticamente

http://www.devmedia.com.br/globalizacao-lendo-resources-automaticamente/6428

Em sua opinião qual a vantagem da utilização de recursos para reaproveitamento de layout e da internacionalização de um site?

 

RESUMO:

Vimos nesta unidade como trabalhar com dados provindos de um banco através do ASP.NET, além de recursos poderosos como o Entity Framework e o LINQ. Também foram apresentadas técnicas para

Página 71 de 102

Page 72: Manual de ASP.NET

trabalhar com a parte visual de um site e como deixá-lo disponível para pessoas do mundo inteiro utilizando internacionalização.

VISÂO geral e breve análise do ADO.NET entity framework. 2013. Disponível em: < http://msdn.microsoft.com/pt-br/data/aa937709.aspx >. Acesso em: 28 fev. 2013.

MARCORATTI.net. ADO.NET – roteiro básico e boas práticas. 2013. Disponível em: < http://www.macoratti.net/adn_bpu1.htm >. Acesso em: 28/02/2013.

 

SUGESTÕES DE LEITURA

SILVA, Maurício Samy. Construindo sites com CSS e (X)HTML. São Paulo: Novatec, 2008

SHEPERD, George. Microsoft ASP.NET 4 Step by Step. Redmond: Microsoft Press, 2010

MSDN. ASP.NET Reference. Disponível em: < http://msdn.microsoft.com/pt-br/library/9k6k3k4a%28VS.85%29.aspx >. Acesso em: nov. 2012.

W3C. Architecture of the World Wide Web, Volume One. Disponível em: < http://www.w3.org/TR/2004/REC-webarch-20041215 >. Acesso em: nov. 2012

Página 72 de 102

Page 73: Manual de ASP.NET

Unidade 3 – Introdução ao Padrão MVC com ASP.NET

VÍDEO AULA 01

Quando falamos de sistemas computacionais geralmente nos deparamos com o seguinte cenário: um banco de dados fornecendo informações para serem apresentadas para o usuário. Na web esse cenário não muda. Quando entramos em um site estamos solicitando informações para uma aplicação, que deve buscar esses dados em uma fonte e então apresentá-los em uma interface amigável. Quando temos que desenvolver uma aplicação que deve se comportar dessa forma, somos inclinados a escrever o código de acesso a banco no mesmo local do código da interface, buscando melhor desempenho e pouco código. Mas será que essa é a melhor forma de desenvolvimento para essa situação? Temos que pensar que interfaces mudam mais frequentemente que regras de negócio. Dessa forma toda alteração referente à interface seria difícil por estar amarrada a código de acesso a banco e regra de negócio.

Mas como podemos resolver esse problema?

Para responder essa pergunta devemos entender as variáveis existentes no contexto desse tipo de aplicação:

Como dito anteriormente interfaces tendem a mudar constantemente, principalmente quando falamos de WEB. Páginas podem ser alteradas várias vezes em um curto período de tempo para proporcionar uma melhor experiência para os usuários;

Dados podem ser disponibilizados de muitas formas, por exemplo, notícias podem ser disponibilizadas na web em HTML, para serem visualizadas em navegadores, mas também podem estar disponíveis em XML ou JSON para serem consumidas por aplicativos cliente;

Interfaces tendem a ser mais dependentes dos dispositivos que irão apresenta-las, por exemplo, um sistema pode ter um excelente design para rodar em um desktop, mas o mesmo design não funciona em um celular;

Criar interfaces para o usuário final e regras de negócio são tipos de trabalhos para profissionais diferentes, logo é

Página 73 de 102

Page 74: Manual de ASP.NET

necessário ter uma equipe com profissionais de diferentes áreas para trabalhar com esse tipo de aplicação.

Saiba mais: Serialização JSON

http://www.json.org/json-pt.html

Note que todos os pontos citados tem alguma relação com a apresentação final para o usuário, isso porque as regras de negócio de uma aplicação são pouco alteradas se comparadas com a interface. Logo elas devem ser separadas de alguma forma para facilitar a manutenção de código e permitir futuras extensões da aplicação.

 

Padrão MVC

O MVC (Modelo-Visão-Controle) é um padrão de desenvolvimento que separa a interface, as regras de negócio e as ações disponíveis na aplicação em 3 diferentes módulos:

Modelo : O modelo é responsável por gerenciar os dados e o comportamento de uma aplicação, disponibiliza informações sempre que solicitado.

Visão : A visão tem como único objetivo montar a apresentação das informações para quem solicitou.

Controle : O controle tem como responsabilidade receber solicitações, sejam elas através de um mouse ou teclado ( caso o contexto permita ) ou uma simples requisição WEB, alertar o modelo sobre a solicitação e escolher uma visão para apresentar o resultado da ação.

O padrão MVC especifica uma separação clara das responsabilidades da aplicação, permitindo dessa forma um baixo acoplamento entre as

Página 74 de 102

Page 75: Manual de ASP.NET

partes, ou seja, cada elemento depende o mínimo possível um do outro. Essa separação permite dividir uma aplicação em 3 partes, diminuindo a complexidade do todo pois permite o desenvolvedor focar em um módulo sem depender do outro.

Figura – Modelo MVC

Fonte:  ASP.NET (2013)

É importante entender que o modelo não é dependente em nenhum nível do controle ou da visão. Dessa forma é possível construir a lógica de negócio da aplicação sem se preocupar com a apresentação.

Existem algumas variações do padrão MVC, como o MVP (Model-View-Presenter), veja no link abaixo como funciona esse padrão:

Saiba mais: Padrão MVP

http://imasters.com.br/artigo/18683/dotnet/mvp-e-aspnet-introducao-ao-passive-view/

VÍDEO AULA 02

 

ASP.NET MVC

O ASP.NET MVC é um framework que contém todos os recursos disponíveis no ASP.NET, permitindo criar aplicações WEB ricas utilizando o padrão MVC.

Algo que deve ficar claro é que o ASP.NET MVC não veio para substituir o já consolidado ASP.NET Web Forms, e sim para adicionar uma nova forma de construir aplicações web poderosas utilizando a plataforma .NET.

Vídeo: MVC ou WebForms:

Página 75 de 102

Page 76: Manual de ASP.NET

http://youtu.be/GYxQSIjftqs

Com a inclusão do ASP.NET MVC como mais uma opção para desenvolvimento WEB devemos entender quando devemos deixar de utilizar o já conhecido Web Forms  em favor do MVC. Vejamos algumas das vantagens dessa arquitetura:

Sugere a utilização de um padrão, separando responsabilidades e tornando o código mais claro para manutenção.

Facilita testes por ser uma arquitetura simples.

Permite o desenvolvedor ter o controle total do que será enviado para o cliente.

Veremos a seguir um resumo do papel de cada “camada” do ASP. NET MVC:

 

Modelo

Temos no modelo basicamente classes de domínio (que representam o negócio) e classes para acesso a fonte de dados. O modelo é responsável por passar os dados para o controle.

Uma forma de se construir o modelo é a utilização do Entity Framework, que além de criar as classes de domínio também cria todas as classes necessárias para acesso aos dados que representam essas classes.

 

Visão

A visão é responsável por apresentar os dados da forma solicitada. Quando falamos de WEB geralmente essa apresentação é feita através de HTML, CSS e Javascript.

No ASP. NET MVC uma Visão é construída utilizando um mecanismo chamado de View Engine. Uma View Engine é uma sintaxe especial disponível para construir uma Visão.

Existem diversas View Engines disponíveis para serem utilizadas no ASP.NET MVC, mas a mais utilizada atualmente é chamada Razor.

Veremos em detalhes as Views Engines no tópico sobre Visões.

Controle

O Controle é responsável por receber as requisições dos clientes e mapeá-las para métodos chamados de ações. O papel das ações é pedir as informações requisitadas para o modelo e devolve-las para as visões.

É importante entender que as Ações devem ter responsabilidades únicas e geralmente são compostas por pouco código. Se você notar

Página 76 de 102

Page 77: Manual de ASP.NET

que uma ação está muito extensa, desconfie, pois algo pode estar errado.

Veremos a seguir como trabalhar com cada uma das partes do ASP.NET MVC.

 

Modelo com Entity Framework

Vimos anteriormente que no modelo temos as classes de domínio e de persistência de dados. Classes podem ser criadas de diferentes formas, entre elas as já conhecidas classes POCO (Plain Old CLR Object) e através do Enttiy Framework, que além de já criar as classes chamadas de Entidades, também já as vinculam a uma fonte de dados.

O Entity Framework Code First permite que criemos classes POCO, essas classes são mapeadas para o banco de dados através de um recurso chamado de Data Anotations, que nada mais são que atributos para informar como uma  classe e suas propriedades devem ser mapeadas.

Veremos abaixo a representação de classes utilizando os recurso do Data Anotations:

Página 77 de 102

Page 78: Manual de ASP.NET

O código acima representa duas Entidades: Produto e Categoria. Não existe nada de diferente com relação ao código que utilizávamos para criar classes antes do Entity Framework, exceto pelos atributos adicionados nas propriedades. Primeiramente temos que entender que cada uma das propriedades da classe irá ser mapeada para uma coluna no banco de dados. Dessa forma é necessário adicionar instruções para configurar como essas propriedades serão mapeadas, é nesse momento que entra os Data Anotations.

Cada um dos atributos adicionados na classe adicionam uma configuração para o mapeamento: “Key” marca a propriedade como chave primária, “Required” seta a propriedade como não nula, e assim por diante.

Saiba mais: A importância do Data Annotation

http://msdn.microsoft.com/pt-br/library/jj129537.aspx

Mas as classes acima sozinhas não serão mapeadas para o banco. Para isso precisamos de uma classe auxiliar que irá fazer esse trabalho:

Página 78 de 102

Page 79: Manual de ASP.NET

A Classe “Contexto” criada acima será responsável por criar o banco de dados caso ele não exista, por herdar de “DbContext” ela já tem todos os recursos necessários para fazer o mapeamento das classes para tabelas no banco.

Note que a palavra “conexao” está sendo passadA para o construtor da classe base, esse é o nome da string de conexão que foi criado no arquivo de configuração App.config como mostrado abaixo:

Saiba mais: Usando Arquivos de Configuração

http://msdn.microsoft.com/pt-br/library/gg537280.aspx#intro

 

Visões

Uma visão no ASP.NET MVC é composta basicamente de 2 tipos de elementos:

- Estáticos: é a parte da visão que é enviada diretamente para o cliente sem nenhum tipo de processamento, entre ele podemos citar o HTML, CSS e Javascript (esse ultimo sendo dinâmico apenas no cliente).

- Dinâmicos: é a seção da visão que é processada no servidor antes de ser enviada para o cliente, geralmente o resultado do

Página 79 de 102

Page 80: Manual de ASP.NET

processamento gera conteúdo estático para ser enviado para o cliente.

Para criar conteúdo dinâmico em visões no ASP.NET utilizamos um conceito chamado de View Engine. Uma View Engine é um módulo plugável do ASP.NET, ou seja, pode ser substituída por outra. A diferença básica entre as diferente View Engines disponíveis é a sintaxe utilizada por cada uma delas. Cada View Engine utiliza uma sintaxe diferente para construção do conteúdo dinâmico em uma Visão, isso quer dizer que a escolha da View Engine irá impactar diretamente em como as Visões da sua aplicação deverão ser escritas.

A View Engine padrão do ASP.NET é conhecida como ASPX, suas  extenções de arquivo geralmente são:

- aspx: páginas/visões;

- ascx: user controls;

- master: master pages.

Para entendermos qual o papel da View Engine vamos analisar o código abaixo:

No exemplo acima foi utilizado o tipo DateTime, saiba mais sobre ele no link abaixo:

http://msdn.microsoft.com/pt-br/library/vstudio/system.datetime.aspx

Podemos notar no exemplo acima a presença do delimitador  . Esse delimitador é responsável por marcar o começo e término do código que será processado no servidor, gerando conteúdo estático que será enviado para o cliente.

Ainda no exemplo acima temos a presença de duas expressões dentro dos delimitadores do ASPX, são elas:

Se considerarmos que a variável nome contém o valor “João” e a data/hora atual do servidor seja “01/01/2013 12:00:00” teremos o seguinte resultado para o cliente:

Página 80 de 102

Page 81: Manual de ASP.NET

Algo que devemos notar é que para cada bloco de código dinâmico utilizando a View Engine ASPX devemos ter pelo menos 4 caracteres () para delimitar o começo e fim do bloco. O uso desses caracteres pode tornar o código de difícil leitura caso a Visão contenha uma quantia considerável de conteúdo dinâmico.

Para resolver o problema mostrado acima foi criada uma nova View Engine chamada Razor. O Razor contém uma sintaxe mais simples e inteligente e está sendo amplamente utilizada no ASP.NET MVC.

Para efeito de comparação entre as duas View Engines, veremos como ficaria o exemplo mostrado anteriormente utilizando o Razor:

O Razor utiliza o caractere @ para marcar o início do bloco e não necessita de um delimitador para fechar o bloco, ou seja, ele é esperto o bastante para identificar quando o bloco terminou e conteúdo estático (html) começou.

Vamos ver alguns cenários onde o Razor pode ser aplicado:

Estruturas de repetição:

Vejamos um exemplo de um bloco foreach na sintaxe do Razor:

Note que dentro do bloco foreach temos marcações HTML. Não foi necessário terminar o bloco para inserir o conteúdo que será repetido, como mostrado anteriormente o Razor sabe diferenciar código de servidor de código do cliente na maioria dos cenários.

O mesmo padrão pode ser aplicado para outras estruturas de repetição como o for ou while.

Atenção para o seguinte detalhe

Considere o código abaixo:

O código acima irá gerar um erro pois a sintaxe do Razor irá entender que “Cliente” é um código de servidor (C#) e não um literal, para resolver esse problema pode ser utilizada uma tag HTML para envolver o conteúdo:

Página 81 de 102

Page 82: Manual de ASP.NET

Estruturas condicionais:

As estruturas condicionais são escritas utilizando o mesmo padrão mostrado anteriormente nas estruturas de repetição, veremos abaixo um exemplo utilizando uma estrutura if:

Múltiplas linhas de código

Conheça outras View Engines no link abaixo:

http://www.infoq.com/br/news/2010/07/Razor

Layouts

Página 82 de 102

Page 83: Manual de ASP.NET

O ASP .NET 2.0 introduziu o conceito de Master Pages que permite uma aplicação WEB definir uma estrutura visual padrão onde todas as páginas irão herdar, tornando o processo de alteração simples e rápido.

O Razor utiliza esse mesmo conceito, simplificando ainda mais o processo nomeado de Layout. Um Layout pode conter código estático e dinâmico que será aproveitado por todas as outras páginas.

Veremos no exemplo abaixo como um Layout pode ser construído:

O código acima será apresentado em todas as Visões que utilizarem o Layout, o conteúdo específico de cada Visão será inserido no local que contém a instrução @RenderBody().

Para especificar que uma Visão irá utilizar um Layout basta utilizar o seguinte código:

Onde “nome_do_layout.cshtml” deve ser substituido pelo nome dado ao Layout da sua aplicação.

Considere o seguinte Layout e Visão:

layout1.cshtml

Página 83 de 102

Page 85: Manual de ASP.NET

Controles

Controles são classes derivadas da classe System.Web..Mvc.Controller e são basicamente compostas de Ações. Ações são métodos invocados quando uma requisição é disparada.

Considerando essa URL uma ação chamada Detalhes do controle Cliente será invocada.

Uma ação é definida como um método público em um controle, é importante saber que todo método público dentro de um controle é automaticamente considerado uma ação e é exposto para qualquer usuário que tenha conhecimento da correta URL para invoca-lo.

Ações retornam resultados do tipo Action Result. Um Action Result pode representar vários tipos de resposta, como uma Visão, um arquivo ou até mesmo um redirecionamento.

Seguem abaixo alguns dos tipos derivados de ActionResult que podem ser retornados por uma ação:

ViewResult – HTML, CSS, Javascript e outras marcações existentes em uma página WEB.

JsonResult – Dados serializados em JSON (Javascript Object Notation), muito utilizados em aplicativos clientes que utilizam AJAX.

RedirectResult – Representa um redirecionamento.

ContentResult – Representa um texto.

Veja todos os tipos derivados de ActionResult no link abaixo:

http://msdn.microsoft.com/en-us/library/system.web.mvc.actionresult%28v=vs.108%29.aspx

Vejamos abaixo um controle com uma ação com retorno do tipo ViewResult:

O retorno do método View() é do tipo ViewResult apesar de a assinatura da ação Index() ser do tipo ActionResult. Isso é possível porque ViewResult é derivada da classe ActionResult.

Página 85 de 102

Page 86: Manual de ASP.NET

Segue outro exemplo:

O exemplo acima retorna um redirecionamento para outra ação através do método RedirectToAction().

Caso uma ação retorne um tipo que não é um ActionResult, por exemplo uma string ou um int, o resultado será convertido para o tipo ContentResult que irá retornar o resultado em formato texto. Por exemplo:

O método acima retornará um ContentResult, o mesmo resultado poderia ser alcançado da seguinte forma:

 

FÓRUM:

Considerando os conceitos apresentados, cite as vantagens que você identificou quanto a utilização o padrão MVC para o desenvolvimento na WEB. Quais os cenários ideais para utilização do ASP.NET MVC?

RESUMO

Vimos nesta unidade como o padrão MVC é estruturado e suas grandes vantagens quando aplicado adequadamente no desenvolvimento de aplicações para WEB.

Foi apresentada a tecnologia ASP.NET MVC, o framework que utiliza todos os recursos já existentes no ASP.NET aplicado ao padrão MVC, como funcionam suas partes (Modelo,Visão e Controle) e como construí-las utilizando recursos como o Entity Framework e a View Engine Razor.

 

 

Página 86 de 102

Page 87: Manual de ASP.NET

ASP.NET MVC overview. 2013. Disponível em: < http://www.asp.net/mvc/tutorials/older-versions/overview/asp-net-mvc-overview >. Acesso em: 28 fev. 2013.

 

SUGESTÕES DE LEITURA

LOUREIRO, Henrique. C# 4.0 com Visual Studio 2010. Lisboa: FCA, 2011

MSDN. ASP.NET MVC Overview. Disponível em: < http://msdn.microsoft.com/en-us/library/dd381412%28v=vs.108%29.aspx >. Acesso em: nov. 2012.

MSDN. ASP.NET MVC 3 Razor. Disponível em: < http://msdn.microsoft.com/en-us/vs2010trainingcourse_aspnetmvc3razor.aspx >. Acesso em: nov. 2012

PALERMO, Jeffrey; Scheirman, Ben; Bogard, Jimmy. ASP.NET MVC em Ação. São Paulo: Novatec, 2010

Unidade 3 – ASP.NET MVC - Parte 2

Como criar um Projeto em ASP.NET MVC

Veremos abaixo como criar um projeto para começarmos a trabalhar com o ASP.NET MVC. Para todos os exemplos será utilizado o Microsoft Visual Studio Express 2012 for Web, .NET Framework 4.5 e ASP.NET MVC 4.

Página 87 de 102

Page 88: Manual de ASP.NET

Todos os produtos citados podem ser baixados no link abaixo:

http://www.microsoft.com/visualstudio/eng/products/visual-studio-express-for-web

Crie um novo projeto conforme o modelo abaixo:

Ao criar o projeto será apresentada a seguinte tela:

Página 88 de 102

Page 89: Manual de ASP.NET

A tela acima pede para ser selecionado um template para o projeto. Dependendo da opção selecionada arquivos adicionais podem ou não ser inseridos no projeto, deve ser levado em conta o contexto da aplicação para selecionar o template, por exemplo, se a opção Internet Application for selecionada serão adicionados arquivos para autenticação e controle de usuário, funcionalidades que geralmente se aplicam a esse tipo de cenário.

Iremos selecionar a opção Basic que irá adicionar apenas os arquivos básicos para o funcionamento do projeto.

Nessa tela também deverá ser selecionado a View Engine padrão para construção das Visões, selecione a opção Razor.

Ainda nessa tela temos a opção de criar um projeto para testes da aplicação, marque a caixa “Create a unit teste project”’se esse for o caso.

Saiba mais: Testes Unitários

http://msdn.microsoft.com/pt-br/library/ms182515%28v=vs.90%29.aspx

Esses são os passos necessários para criar um projeto com a estrutura básica para começar a desenvolver, Veremos a seguir alguns conceitos importantes para entender como o ASP.NET MVC trabalha com requisições.

Página 89 de 102

Page 90: Manual de ASP.NET

Roteamento

O ASP.NET MVC contém um importante sistema de roteamento para conseguir mapear uma requisição provinda de um cliente para algum local que irá tratar e responder essa requisição.

Toda requisição no ASP.NET MVC é mapeada para uma Ação de um Controle e a URL informada irá determinar quem irá tratar essa requisição.

Quando criamos uma aplicação em ASP.NET MVC esta já contém uma configuração padrão de roteamento para conseguir mapear requisições. O arquivo padrão para configuração das rotas é chamado de Global.asax.

Saiba mais: Arquivo Globalx.asax

http://msdn.microsoft.com/pt-br/library/2027ewzw%28v=vs.85%29.aspx

Para entender melhor vamos analisar a figura abaixo:

Figura – Fluxo de Roteamento no ASP.NET MVC

Fonte: WHAT... (2013)

Fonte: Rashid (2008)

Conforme ilustrado acima, alguns passos são executados do momento que o cliente pede uma página até o retorno do servidor:

1-  A requisição é feita ao servidor;

2-  O roteamento do ASP.NET verifica se a requisição se encaixa em uma das regras definidas e escolhe o controle apropriado;

3-  O Controle pede as informações requisitadas para o modelo;

4-  O Modelo busca as informações da base de dados e retorna ao Controle;

5-  O controle envia os dados para a Visão que por sua vez é respondida ao cliente;

Para entendermos como as configurações de roteamento funcionam, veremos o exemplo do mapeamento padrão abaixo:

Página 90 de 102

Page 91: Manual de ASP.NET

O código acima consegue mapear requisições nos padrões abaixo:

http://www.dominio.com.br/controle/acao/parametro

http://www.dominio.com.br/controle/acao

http://www.dominio.com.br/controle/

http://www.dominio.com.br/

Mas como esse mapeamento funciona?

Note que na configuração da rota existe a seguinte seção: {controller}/{action}/{id}, esse é o padrão esperado para uma URL. Vamos considerar a URL abaixo:

http://www.meusite.com.br/cliente/deletar/5

Na URL acima temos os seguintes elementos:

Domínio: meusite.com.brControle: clienteAção: deletarParâmetro: 5

Ou seja, ao receber a requisição acima será procurado um controle com nome “Cliente”, nesse controle deverá existir uma Ação chamada “Deletar”, e para essa Ação será passado o valor 5.

Também devemos nos atentar a seguinte seção da configuração:

new { controller = "Home", action = "Index", id = "" }, esse é um objeto anônimo que representa valores padrões caso algum (ou nenhum) dos valores seja informado. Caso o parâmetro não seja informado uma string vazia será enviada para a ação, se ela também não for informada será escolhida uma com nome Index, e por fim se o controle não for informado será selecionado o controle Home.

Saiba mais: Tipos Anônimos

http://msdn.microsoft.com/pt-br/library/vstudio/bb397696.aspx

Para entender melhor vejamos os exemplos abaixo:

Note que para cada valor não informado um valor padrão é escolhido.

Página 91 de 102

Page 92: Manual de ASP.NET

 

Criando rotas personalizadas

Para aplicações pequenas o esquema de roteamento padrão é suficiente, mas existem alguns casos onde haverá necessidade de utilizar outros tipos de padrão de URL, nesses casos será necessário criar mapeamentos customizados adicionais.

Vamos considerar um blog, uma das funcionalidades desse tipo de sistema é a possibilidade de listar todas as postagens de um determinado período. Para permitir essa funcionalidade na rota padrão teríamos que utilizar algo parecido com a URL abaixo:

Considerando a URL acima teríamos um controle chamado “Arquivo” e uma ação “Listar” recebendo um parâmetro representando a data pela qual os dados devem ser filtrados.

Mas e se quisermos uma URL no seguinte padrão?

Isso seria um problema pois o roteamento consideraria que o valor “11-2012” é a ação desejada, e não um parâmetro.

Para corrigir o comportamento permitindo um novo padrão de URL devemos adicionar mais um padrão no arquivo Global.asax conforme mostrado abaixo:

Importante: Uma aplicação não está limitada a um número máximo de padrões de rotas, mas a ordem que elas são definidas irá impactar diretamente no mapeamento realizado pela aplicação.

Vamos considerar uma aplicação com os 2 mapeamentos abaixo:

Caso a URL seja acessada o primeiro padrão de rota acima será escolhido e não o segundo como esperado, isso porque as rotas são analisadas sequencialmente de cima para baixo, o primeira padrão que se encaixa a URL informada é escolhida.

Isso quer dizer que caso a rota padrão seja mantida na aplicação ela deverá ser deixada por último, caso contrários as rotas customizadas serão ignoradas.

Por fim, o arquivo Global.asax ficaria da seguinte forma:

Página 92 de 102

Page 93: Manual de ASP.NET

 

 

Sessão

A seção no ASP.NET é um recurso utilizado para guardar informações do usuário que devem ser mantidas entre as requisições ao servidor. Como exemplo podemos citar uma aplicação web que contém um sistema de autenticação. Nesse sistema o usuário deve se logar através de um formulário e em cada requisição posterior o servidor deve reconhecer o usuário sem a necessidade de um novo login.

Para entender como funciona o recurso de sessão no ASP.NET vamos primeiramente entender o problema que ele veio resolver através do exemplo abaixo:

View:

Página 93 de 102

Page 94: Manual de ASP.NET

O exemplo acima se baseia em um formulário para entrada de números, em cada envio ao servidor é somado o novo valor ao campo soma que serve como um acumulador. A soma é respondida para o cliente através de um componente Literal.

Sabendo do funcionamento da página podemos deduzir que o resultado final se o usuário informar os valores 200, 50, 20 será de 270. Esse não será o resultado pois cada requisição é tratada de forma independente, ou seja, o estado não se mantém. Isso quer dizer que cada clique no botão irá criar um novo objeto no servidor cujo estado inicial do campo soma será sempre 0.

Mas como resolvemos esse problema? Vejamos o exemplo abaixo:

Página 94 de 102

Page 95: Manual de ASP.NET

No exemplo acima foi utilizada uma sessão para manter o estado da soma. Note que para guardar ou resgatar um valor da sessão basta utilizar o nome Session seguindo da chave de identificação entre [].

Uma sessão que não existe é criada no momento em que é adicionado um valor pela primeira vez, sem necessidade de código adicional:

Toda sessão tem um tempo de expiração, ou seja, depois de um determinado intervalo ela é descartada pelo servidor. O timeout padrão das sessões no ASP.NET é de 20 minutos, esse tempo pode ser alterado no Web.Config da seguinte forma:

 

Cookies

Página 95 de 102

Page 96: Manual de ASP.NET

Cookies são pequenos arquivos de texto armazenados no computador cliente. O cookie sempre é enviado para o servidor quando uma requisição é feita, e pode conter informações importantes para o funcionamento de uma página, por exemplo o nome de usuário do visitante e suas preferências.

Para criar um cookie basta serem informados o nome, valor e data de expiração. Todo cookie deve conter uma data de expiração para que possa ser  eliminado. Devemos lembrar que um cookie pode ser eliminado antes da data de expiração, pois o usuário pode limpar os cookies do navegador a qualquer momento.

Veremos a seguir o código para criar um cookie:

HttpCookie cookie = new HttpCookie("ultimo_acesso");cookie.Value = DateTime.Now.ToString();cookie.Expires = DateTime.Now.AddDays(1);Response.Cookies.Add(cookie);

Primeiro é instanciado um objeto do tipo HttpCookie e é passado seu nome para o construtor. Depois são atribuídos valores para as propriedades Value e Expires. A propriedade Value guarda o valor do cookie, no caso acima a data do ultimo acesso do usuário ao site. Já a propriedade Expires guarda a data de expiração do cookie, o valor DateTime.Now.AddDays(1) representa  a data atual acrescida de 1 dia. Por fim é utilizado o comando “Response.Cookies.Add(cookie)” para gravar o cookie na maquina cliente na resposta da requisição.

Veremos no exemplo ao seguir como podemos mostrar ao usuário a data do ultimo acesso utilizando cookies:

View “Index”:

Página 96 de 102

Page 97: Manual de ASP.NET

No exemplo acima é gravado um cookie sempre que o usuário venha a clicar no botão. Em toda requisição é verificado se o cookie “ultimo_acesso” existe através da expressão “Request.Cookies["ultimo_acesso"] != null”, caso o cookie exista seu valor é resgatado com a instrução “Request.Cookies["ultimo_acesso"].Value”.

Em cada visita da página acima será mostrado a data da última visita, desde que o usuário clique no botão para gravar o cookie.

Para deletar um cookie da máquina do cliente basta enviar para o cliente o cookei que deseja remover com alguma data passada:

HttpCookie cookie = new HttpCookie("ultimo_acesso");cookie.Expires = DateTime.Now.AddDays(-1);Response.Cookies.Add(cookie);

No código acima o cookie “ultimo_acesso” será deletado, pois ele tem a data de expiração menor que a atual.

Expondo Serviços na Internet com ASP.NET WEB API

Grande parte do sucesso de alguns dos maiores sites vem pelo extremo cuidado com relação à usabilidade. Os visitantes estão cada vez mais exigentes e esperam uma experiência semelhante a que tinham nos aplicativos desktop, ou seja, querem respostas rápidas e rica interação. O recurso utilizado para alcançar esse nível de usabilidade na WEB é chamado de AJAX (Asynchronous Javascript and

Página 97 de 102

Page 98: Manual de ASP.NET

XML) que faz uso de requisições assíncronas para evitar a atualização total da página.

Saiba mais: Introdução ao AJAX

http://www.linhadecodigo.com.br/artigo/3585/ajax-basico-introducao.aspx

Para utilizar AJAX em uma página precisamos de um serviço que disponibilize os dados serializados em XML ou JSON, para isso existem várias tecnologias disponíveis na plataforma .NET, entre ela podemos citar os serviços em ASMX, ASHX e WCF.

Com a chegada do ASP.NET 4 foi introduzida uma nova tecnologia chamada de ASP.NET WEB API, que permite a criação de serviços HTTP que podem ser consumidos pelos mais diversos tipos de clientes, como navegadores e aplicativos móveis.

O ASP.NET WEB API é mais uma das tecnologias que utilizam todos os recursos do ASP.NET, mas é importante entender que esse recurso tem como objetivo criar serviços e não páginas WEB, como mostrado abaixo:

A figura mostra o lugar do ASP.NET WEB API dentre as várias tecnologias disponíveis na plataforma .NET.

O ASP.NET WEB API utiliza uma arquitetura baseada em controles, mas diferente do ASP.NET MVC, os controles do WEB API são derivados de uma classe base chamada de ApiController.

Segue abaixo um exemplo da estrutura de um controle no WEB API:

Página 98 de 102

Page 99: Manual de ASP.NET

Saiba mais: Status HTTP através da enumeração HttpStatusCode:

http://msdn.microsoft.com/en-us/library/system.net.httpstatuscode%28v=vs.80%29.aspx

O código acima cria um controle com um método chamado “GetCliente” que recebe um parâmetro. Se o valor recebido for 1 será retornado o cliente João, caso contrário será enviado para o cliente um status 404 (Página não encontrada).

Mas qual o padrão de acesso?

Para entender vamos verificar a rota adicionada ao projeto no momento de sua criação:

Um detalhe interessante é que o nome do método não precisa ser especificado na URL, isso porque o WEB API seleciona o método

Página 99 de 102

Page 100: Manual de ASP.NET

apropriado tomando como parâmetro o verbo HTTP (GET, POST, PUT, DELETE) que foi utilizado para efetuar a requisição.

Saiba mais: REST e verbos HTTP

http://msdn.microsoft.com/pt-br/magazine/dd315413.aspx

A seguinte convenção deve ser utilizada para que um método consiga ser invocado:

Nome do Método: verbo HTTP + Descrição

Exemplo: GETCliente(), POSTCliente()

 

Invocando o serviço Com Ajax

Vamos chamar o cliente GetCliente() utilizando jQuery e apresentar o retorno em um elemento HTML.

HTML:

 

JAVASCRIPT:

Página 100 de 102

Page 101: Manual de ASP.NET

Saiba mais: jQuery

http://www.maujor.com/blog/2008/10/22/introducao-a-biblioteca-jquery/

FÓRUM:

Cite cenários adequados para a utilização de Cookies e Sessão no ASP.NET, e quais as desvantagens de cada um dos recursos.

RESUMO:

Vimos nesta unidade como trabalhar com um recurso importante do ASP.NET MVC, o roteamento de requisições. Também foram apresentados elementos para trabalhar com persistência de dados entre requisições e a tecnologia ASP.NET WEB API, tecnologia que permite criar e disponibilizar requisições na WEB.

RASHID, Kazi Mansur. Learn how to develop a Digg-like application with ASP.NET MVC, LINQ to SQL and ASP.NET AJAX. 2008. Disponível em: <

Página 101 de 102

Page 102: Manual de ASP.NET

http://dotnetslackers.com/articles/aspnet/KiggBuildingADiggCloneWithASPNETMVC1.aspx >. Acesso em: 21 fev. 2013.

WHAT is MVC (modell view controller). 2013. Disponível em: < http://www.crcdata.net/technologies/what-is-mvc-model-view-controller >. Acesso em: 28 fev. 2013.

 

SUGESTÕES DE LEITURA

PALERMO, Jeffrey; Scheirman, Ben; Bogard, Jimmy. ASP.NET MVC em Ação. São Paulo: Novatec, 2010

LOUREIRO, Henrique. C# 4.0 com Visual Studio 2010. Lisboa: FCA, 2011

MSDN. ASP.NET MVC Overview. Disponível em: < http://msdn.microsoft.com/en-us/library/dd381412%28v=vs.108%29.aspx >. Acesso em: nov. 2012.

MSDN. ASP.NET MVC 3 Razor. Disponível em: < http://msdn.microsoft.com/en-us/vs2010trainingcourse_aspnetmvc3razor.aspx >. Acesso em: nov. 2012

Página 102 de 102