Você está na página 1de 118

Unidade

1
Introduo

Framework e a Linguagem C#

Plataforma

.NET

VDEO AULA 01
Um novo modelo de desenvolvimento
A partir dos anos 90 a internet comeou a mudar a forma como as
organizaes se comunicavam. Aplicaes tradicionais como
processadores de texto e planilhas eletrnicas eram criadas para
funcionar
individualmente,
acessando
dados
que
estavam
armazenados na prpria maquina que o aplicativo era executado. A
maioria dos novos softwares desenvolvida para funcionarem de
forma distribuda, acessando bases remotas e provendo servios para
outros programas, chamados de aplicativos clientes. Como resultado
o primeiro objetivo dos novos softwares suportar o
compartilhamento de informaes pela rede e a distribuio delas
atravs de mensagem eletrnica, e-mail e at mesmo redes sociais.
Basicamente o novo modelo de desenvolvimento de software est
deixando de apenas criar funcionalidades bsicas de um sistema
isolado para a criao de servios que possibilitam gerar solues
para uma grande quantidade de aplicaes.

O .NET Framework possibilita o desenvolvimento de uma plataforma


robusta para criao de aplicativos para desktop, celulares e Internet.
Torna o desenvolvimento para internet uma tarefa fcil como nunca
foi anteriormente.
Fcil publicao e manuteno
Aplicaes podem ser criadas utilizando diferentes tecnologias:
Saiba
mais: Viso
geral
do
.NET
http://msdn.microsoft.com/pt-br/library/hh425099.aspx

Framework

Web pages
Web Services
Bibliotecas (DLLs)
Windows Forms
Console Application
O .NET Framework torna fcil a tarefa de publicao, na maioria dos
cenrios, basta copiar o aplicativo e seus componentes em uma pasta
e execut-lo. Isso possvel porque o .NET Framework localiza e
Pgina 1 de 118

carrega todas as dependncias necessrias que o aplicativo precisa,


mesmo se houverem diferentes verses do mesmo componente no
sistema.
As configuraes ps-instalao tambm so um ponto importante e
que muito bem tratado pelo .NET Framework. Configuraes de
segurana, conexes com banco de dados e parmetros da aplicao
podem ser facilmente alterados sem a necessidade de compilar a
aplicao novamente, isso porque o .NET Framework trabalha com
essas configuraes em um modelo baseado em arquivos. Um
arquivo de configurao um arquivo XML que pode alterar o
comportamento de uma aplicao. Por exemplo, o administrador do
sistema pode configurar a aplicao para utilizar apenas uma verso
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 flexvel e sem impactar o sistema.
Segue abaixo o modelo de um arquivo de configurao utilizado no
.NET:

Vdeo: XML Teoria e Prtica


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

Pgina 2 de 118

Cada um dos ns do xml acima contm uma configurao que pode ir


de uma referncia de um recurso utilizado na aplicao at uma
string de conexo utilizada para conectar no banco de dados.
Elementos do .NET FRAMEWORK
O .NET Framework consiste em trs camadas bsicas:
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 aplicao
e o sistema operacional. O CLR simplifica o desenvolvimento de uma
aplicao e reduz a quantidade de cdigo que os desenvolvedores
tm que escrever pois disponibiliza uma grande quantidade de
recursos, dentre eles podemos citar o gerenciamento de memria 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, no importando a
linguagem de programao utilizada e retirando qualquer esforo
requerido do programador.
O CLR tambm responsvel por compilar o cdigo antes do mesmo
ser executado. Ao contrrio de produzir uma compilao binria,
como a maioria dos compiladores faz, o compilador do .NET produz a
representao do cdigo em uma linguagem comum para o .NET
Framework, chamada de Microsoft Intermediate Language (MSIL),
mais conhecido com IL. Quando o cdigo executado pela primeira
vez , o CRL invoca um compilador especial chamado Just In Time
(JIT), que transforma o cdigo IL em um executvel especfico para o
tipo do processador que a aplicao ser executada. Como todas as
linguagens do .NET Framework tm como resultado a mesma
compilao, todas tm o mesmo desempenho. Isso quer dizer que

Pgina 3 de 118

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 compilao de um
programa desenvolvido em uma das linguagens do .NET Framework,
no caso o C#:
Figura - Processo de Compilao do .NET

Fonte: Introduction... (2013)

Commom Type System


O Commom Type System (CTS) um componente do CLR que
mantm um conjunto padro de tipos de dados, cada um com
caractersticas e comportamentos em comum. A grande vantagem
por trs do CTS a possibilidade de trabalhar com os mesmos tipos
de dados utilizando qualquer uma das linguagens do .NET. Por
exemplo, se uma aplicao em C# precisa se comunicar com um
componente desenvolvido em VB.NET ela no precisar conter
Pgina 4 de 118

nenhum cdigo adicional para conseguir se comunicar com o


componente.
O CTS permite que cada linguagem de programao 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. Tambm possvel utilizar na programao diretamente o tipo
definido no CTS.
A tabela a seguir mostra cada um dos tipos definidos no CTS:

.NET Class Library


O .NET Class Library a camada que prov uma grande quantidade
de classes que executam as mais diversas funes, por exemplo,
efetuar operaes matemticas, 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 contm classes bases e tipos de dados,
como a String, o Int16, Console e Array.
Exemplos de namespaces do .NET Class Library:
System.Data.SqlClient: Contm classes para trabalhar com o banco
de dados SQL Server;
Pgina 5 de 118

System.IO: Contm classes para trabalhar com arquivos e dados


serializados em memria.
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 publicao da
aplicao, pois o .NET Class Library est incluso em todas as verses
do .NET Framework.
Tecnologias unificadas
At agora, foi abordado como funcionam os componentes internos
do .NET Framework. As tecnologias, listadas a seguir, so as
diferentes formas disponveis para utilizar todos os recursos da
plataforma.
Vdeo: .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. Contm
ferramentas para DEBUG, designers para HTML, XML, banco de dados
e cdigos de servidor. Alm disso conta com IntelliSense, recurso que
completa o cdigo, garantindo que o desenvolvedor evite erros, alm
de adicionar um alto ganho na produtividade.
Veja na tabela abaixo alguns recursos do Visual Studio:

Pgina 6 de 118

Windows Forms
Windows Forms o nome dado para o conjunto de classes que
contm funcionalidades que suportam criar aplicaes desktop
tradicionais, que contm uma interface grfica para interao do
usurio. O Windows Forms torna fcil o desenvolvimento de sistemas
para o usurio final utilizando qualquer uma das linguagens do .NET
Framework. O Visual Studio permite o desenvolvimento Windows
Forms arrastando controles em uma ferramenta visual, descartando a
necessidade de criar a parte grfica da aplicao utilizando cdigo,
recurso esse chamado de drag-and-drop (arrastar e soltar).

Pgina 7 de 118

Desenvolvimento Windows Forms no Visual Studio


Saiba

mais: Introduo

ao

Windows

Forms

http://msdn.microsoft.com/pt-br/vbasic/ms789117.aspx
ASP.NET
Para o desenvolvimento de aplicaes WEB o .NET framework dispe
do
ASP.NET, uma
arquitetura
de
desenvolvimento
criada
especificamente para criar aplicaes WEB poderosas com alta
produtividade.
O ASP.NET dividido em vrias tecnologias, entre ela o ASP.NET Web
Forms, ASP.NET MVC e Web Services.
ASP.NET Web Forms
Desenvolvedores que no tm familiaridade com o desenvolvimento
para WEB podem perder muito tempo para descobrir como validar um
simples campo de e-mail em um formulrio de contato. Uma
validao 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 no ficar explicitamente visveis no momento do
desenvolvimento se no houver a ateno necessria. Se a validao
for feita no lado cliente utilizando Javascript, deve ser considerado o
risco do navegador do usurio no suportar Javascript, ou at mesmo
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
usurio, ou seja, a aplicao poder ser segura mas ir pecar na
usabilidade.
O Web Forms simplifica todos os processos da arquitetura clienteservidor, 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 pgina e
editar suas caractersticas visualmente.

Pgina 8 de 118

Ambiente de desenvolvimento em ASP.NET no Visual Studio


ASP.NET MVC
Vdeo: Introduo

ao

ASP.NET

http://msdn.microsoft.com/pt-br/asp.net/gg252004.aspx
O ASP.NET MVC um framework para trabalhar com o padro 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 no conter cenrios
complexos como o ciclo de vida de pginas baseado em eventos
como o ASP.NET Web Forms. Tambm introduziu no ASP.NET a
possibilidade de configurar rotas para criar endereos amigveis,
permitindo assim um melhor desempenho na disponibilizao de
contedo atravs de mecanismos de busca.
Saiba

mais: Padro

MVC

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

Pgina 9 de 118

Web Services
Um Web Service uma aplicao que expe funcionalidades na web
atravs de mtodos. Web Services so desenvolvidos para serem
consumidos por outras aplicaes e no tm a inteno de interagir
diretamente com o usurio final. Web Services tornam fceis a
criao de recursos para serem acessados remotamente. Aplicativos
clientes podem invocar os mtodos de um Web Service como se eles
estivesses definidos na prpria aplicao.

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 dinmicos introduzidos na verso 4) derivada do C e C++.
Algumas pessoas por sua vez diriam que a linguagem tambm
derivada do Java, por algumas similaridades em seu design.
Sintaticamente o C# muito parecido com C++ e Java. Algumas
palavras chaves so iguais, blocos de cdigo so marcados com
chaves e as instrues so terminadas com ponto e vrgula. A
primeira impresso ao ver um bloco de cdigo 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 nvel de dificuldade do Java. Seu
design apesar de similar, mais moderno que as outras linguagens
citadas.
Algumas das principais caractersticas do C#:

Suporte total a programao orientada a objetos, incluindo


Herana e Interfaces, mtodos virtuais, e sobrecarga de
operadores;

Uma grande quantidade de tipos de dados bases, como tipos


numricos inteiros e fracionados;

Suporte para gerar automaticamente documentao em XML;

Limpeza de memria automtica de recursos no utilizados;

Acesso total a Class Library do .NET Framework, e fcil acesso


as APIs do Windows;

Pgina 10 de 118

Ponteiros e direto acesso a memria so permitidos, mas a


linguagem foi projetada de uma forma para que no seja
necessrio o uso desses recursos;

Suporte a propriedades e eventos;

C# pode ser utilizado para criar qualquer tipo de aplicao


dentro da plataforma .NET, como pginas em ASP.NET e Web
Services.

Muitos dos recursos citados tambm so suportados por outras


linguagens do .NET Framework, como o VB.NET e o Visual C++, mas
deve ser levado em considerao 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 fluda para sua
utilizao.
O que preciso para escrever e rodar cdigo C#
O .NET Framework, atualmente na verso 4.5, necessrio para
executar aplicaes escritas em qualquer linguagem do .NET.
Apesar do C# poder ser escrito em qualquer editor de texto de
terceiros, altamente recomendado a utilizao da IDE oficial, o
Visual Studio, pois contm ferramentas poderosas que possibilitam
um ganho considervel na produtividade.

C# Bsico
Agora que foram apresentados os principais recursos da linguagem
C#, veremos como utiliz-los, compilando o cdigo de exemplo
abaixo:

Pgina 11 de 118

Saiba

mais: Compilador

C#

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

Compilando e rodando o programa


O cdigo acima pode ser compilado executando pela linha de
comando o compilador do C# (csc.exe) contra o arquivo (que deve
ser salvo com extenso .cs), como mostrado abaixo:
csc primeiro_programa.cs
Nota: O compilador do C# pode ser encontrado no seguinte caminho:
{drive}\Windows\Microsoft.NET\Framework\{verso
framework}

do

.net

Exemplo:
C:\Windows\Microsoft.NET\Framework\v4.0.30319
Para poder compilar um cdigo direto da linha de comando, deve ser
verificado se as ferramentas de linha de comando do .NET foram
instaladas no sistema.
Pgina 12 de 118

Depois de compilado ser gerado um arquivo .exe que pode ser


executado da linha de comando ou atravs do Windows Explorer
como qualquer outro executvel.
A sada do programa (considerando que o usurio se chama Joo)
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# so terminadas com
ponto e vrgula, e podem continuar em mltiplas linhas sem
necessidade de um caractere para informar essas continuaes, como
vemos a seguir:

Pgina 13 de 118

Para comentar uma linha basta utilizar duas barras (//). Para vrias
linhas deve ser iniciado com barra e asterisco ( /*) e terminar com a
mesma combinao ao contrrio ( */):

Pgina 14 de 118

Saiba

mais: Comentrios

com

XML

http://msdn.microsoft.com/pt-br/library/vstudio/b2s063f7.aspx
Todos esses aspectos mostram as similaridades do C# com o C++ e o
Java.
As primeiras linhas do cdigo anterior comeam com a utilizao de
namespaces, um recurso utilizado para agrupar classes que tm
responsabilidades similares. Os namespaces do C# so 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 cdigo mas no foram definidas no mesmo namespace. Using
no C# equivalente palavra chave import do Java e using
namespace do C++.
Veremos no cdigo abaixo outra utilizao dos namespaces:

N cdigo acima foi adicionado uma instruo using pois foi


referenciada uma classe contida no namespace System. Vale ressaltar
que a maioria das operaes efetuadas no C# dependem das classes
bases do .NET. Nesse caso, foi utilizada a classe Console para

Pgina 15 de 118

imprimir uma mensagem na linha de comando. O C# no tem


nenhum comando para efetuar essa operao.
Como a maioria dos programas em C# utilizam classes e outros
elementos do namespace System, uma boa prtica adicionar uma
instruo 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# so similares a classes no Java e C++. A declarao da classe
se d com a palavra chave class, seguida do nome da classe e das
chaves. Todo cdigo referente associado a classe deve estar dentro
das chaves, como mostrado no exemplo abaixo:

No exemplo anterior foi declarado um mtodo chamado Main. Todo


executvel desenvolvido em C# (Console, Windows) deve ter um
ponto de partida. Esse o papel do mtodo Main, ser o primeiro
mtodo a ser executado ao abrir o executvel.
Um mtodo no C# tem o seguinte formato:

Pgina 16 de 118

Saiba

mais: Orientao

Objetos

com

C#

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

Primeiro devem ser definidos os modificadores do mtodo que


servem para especificar o nvel de acesso do mtodo. No exemplo
anterior foram utilizadas as palavras chaves public e static. A
palavra chave public define que o mtodo pode ser chamado de
qualquer lugar, inclusive fora da classe que foi definido. J a palavra
chave static indica que o mtodo no poder ser invocado de um
objeto (instncia da classe) e sim diretamente da classe. Logo depois
deve ser definido o tipo de retorno do mtodo, no caso void para
informar que o mtodo no retornar nada. No exemplo, o mtodo
no recebe parmetros. Por fim, so definidas as instrues do
mtodo:

Pgina 17 de 118

A instruo acima declara uma varivel do tipo int chamada x. Deve


ser observado que o compilador no deixar essa varivel ser
utilizada a no ser que ela seja inicializada.
Assim que declarada, pode ser inicializada utilizando o operador de
atribuio igual ( = ):
x = 20;
Tambm possvel declarar e inicializar uma varivel ao mesmo
tempo:
int x = 20;
Se vrias variveis so declaras e inicializadas ao mesmo tempo,
todas as variveis sero consideradas do mesmo tipo:
Int x = 50, y = 100;
No exemplo anterior as duas variveis sero do tipo int.
No possvel declarar variveis de diferentes tipos ao mesmo
tempo:
int x = 20;
bool y = false;
int x = 10, bool y = false; // no compilar
A inicializao de variveis mostra o nvel de segurana do C#.
Nenhuma varivel pode ser utilizada sem primeiro ser inicializada. Em
algumas linguagens o compilador mostraria apenas uma mensagem
Pgina 18 de 118

de alerta, mas o compilador do C# trata essa situao como um erro.


Isso previne a leitura de lixo em memria deixado por outros
programas.
O C# utilizada dois diferentes mtodos para assegurar que variveis
sempre sero inicializadas antes de serem utilizadas:

Variveis que so definidas como atributos em classes e


estruturas,
se
no
inicializadas
explicitamente,
so
automaticamente inicializadas com valores padres do tipo que
foram
declaradas
no
momento
que
so
criadas.

Variveis locais de um mtodo devem ser explicitamente


inicializadas antes de qualquer instruo que ir utilizar o valor
da varivel. A inicializao no precisa ser feita no momento da
declarao da varivel, mas o compilador verificar todos os
caminhos possveis do mtodo e gerar um erro caso o valor da
varivel esteja sendo acessado sem ser inicializado
previamente.
Vdeo: Variveis no C#
https://www.youtube.com/watch?v=0dVOVeT0rTg

O cdigo abaixo ilustra as afirmaes sobre inicializao de variveis:

Pgina 19 de 118

Ao compilar o cdigo acima, ser gerado o seguinte erro:

Pgina 20 de 118

O erro informa que a varivel maiorIdade est sendo utilizada sem


ser inicializada, isso porque caso a idade digitada seja menor que 18
nenhum valor ser atribudo varivel, e no haver um valor para
ser testado na instruo if.
Considere a seguinte instruo:
Pessoa objeto;
No C# essa linha de cdigo declara uma varivel que pode apontar
para um objeto do tipo Pessoa, mas o objeto ainda no foi criado,
logo a varivel no aponta para nada. Qualquer chamada para um
mtodo ou propriedade a partir dessa varivel ir gerar um erro.
Para instanciar um objeto no C# deve ser utilizada a palavra chave
new. Primeiro criada a varivel como no exemplo anterior e logo em
seguida instanciado um objeto;
No final fica assim: Pessoa objeto = new Pessoa();
FRUM:
Com o conhecimento adquirido sobre a plataforma .NET e a
Pgina 21 de 118

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 padro de funcionamento junto ao sistema
operacional e os diversos tipos de arquiteturas possveis para serem
trabalhadas, como Windows e Web, alm do ambiente de
desenvolvimento Visual Studio. Tambm 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.


Disponvel
em:
<
http://msdn.microsoft.com/enus/library/z1zx9t92.aspx >. Acesso em: 21 fev. 2013.
TIPOS de dados (guia de programao). 2013. Disponvel em: <
http://msdn.microsoft.com/ptbr/library/ms173104%28v=vs.80%29.aspx >. Acesso em: 28 jan.
2013.
APLLICATTION development in visual studio. 2013. Disponvel em: <
http://msdn.microsoft.com/en-us/library/vstudio/h8w79z10.aspx >.
Acesso em: 28 fev. 2013.

SUGESTO 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.

Pgina 22 de 118

MSDN. .NET framework application essentials. Disponvel em: <


http://msdn.microsoft.com/en-US/library/vstudio/ms172157
>.
Acesso em: nov. 2012.
MSDN. Introduction to the C# language and the .NET Framework.
Disponvel
em:
<
http://msdn.microsoft.com/library/vstudio/z1zx9t92 >. Acesso em:
nov. 2012.

Unidade 1 Linguagem C# Avanado

Inferncia de tipo
Inferncia de tipo utilizada para omitir o tipo da varivel no
momento da declarao. Para utilizar esse recurso no C# utilizada a
palavra chave var. O compilador ir descobrir o tipo da varivel a
partir do momento da inicializao, por exemplo:
var x = 2;
ir se tornar:
int x = 2;

Pgina 23 de 118

Saiba

mais: A

lgica

da

Inferncia

http://pt.wikipedia.org/wiki/Infer%C3%AAncia
Depois de compilado, as duas instrues so iguais.
Veja mais um exemplo:

Apenas deve ser atentando para algumas regras. A varivel deve ser
sempre inicializada no momento da declarao. De outra forma, o
compilador no saberia definir o tipo da varivel. O valor inicializado
no pode ser null como visto abaixo:

Pgina 24 de 118

Uma vez declarada e inicializada, o tipo da varivel no 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 varivel.
Considere o cdigo:

Vdeo: Introduo

ao

Visual

Basic

.NET

O cdigo acima ir gerar o seguinte erro:

Pgina 25 de 118

O erro informa que no possvel converter implicitamente o tipo


string para int, isso porque a varivel x foi inicializada com o valor 2,
o compilador inferiu o tipo int para esta varivel, logo no possvel
guardar um valor do tipo string.
Escopo de Variveis
O escopo de uma varivel o local do cdigo onde uma varivel pode
ser acessada. No geral, o escopo determinado pelas seguintes
regras:

Um campo ( varivel declarada como membro de classe )


acessvel
dentro
de
qualquer
local
da
classe;

Uma varivel local de um mtodo acessvel apenas no escopo


do mtodo em que foi declarada, assim que o mtodo termina
sua
execuo
a
varivel

eliminada;

Uma varivel local declarada dentro de qualquer estrutura de


repetio (while, for) acessvel apenas no escopo do loop.

Problemas de escopo em variveis locais


comum programas utilizarem o mesmo nome de varivel em
diferentes partes do mesmo. No existe nenhum problema nesse
procedimento se as variveis forem criadas em diferentes escopos
para que no haja a possibilidade de ambiguidade. O mais importante
ter em mente que duas variveis com o mesmo nome no podem
estar no mesmo escopo, como mostrado no exemplo abaixo:

Pgina 26 de 118

O cdigo acima simplesmente imprime na tela os nmeros de 0 a 9, e


depois os mesmos nmeros de 9 a 0, utilizando duas estruturas de
repetio for. importante notar que a varivel i foi declarada duas
vezes no mesmo mtodo. Isso perfeitamente possvel porque a
varivel i foi declarada em estruturas de repetio diferentes, logo
so variveis locais dos loops.
Vejamos outro exemplo:

Se tentarmos compilar o cdigo acima, teremos o seguinte erro:

Pgina 27 de 118

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
Isso ocorre porque a varivel J foi declarada antes do bloco for, no
escopo do mtodo Main, e s ser eliminada quando o mtodo
terminar. A segunda declarao de J est errada, pois o bloco for est
contido no mtodo, dessa forma uma varivel J j existe no escopo e
no pode ser declarada novamente.
Problemas de escopo entre variveis locais e campos
Em algumas situaes possvel distinguir duas variveis com o
mesmo nome no mesmo escopo. Nesse caso o compilador permitir a
criao da segunda varivel com o mesmo nome. Isso porque o C#
consegue diferenciar variveis locais (variveis declaradas dentro de
mtodos) de campos ( variveis declaradas a nvel de classe ).
Consideremos o seguinte cdigo:

Saiba

como

encontrar

erros

atravs

do

Visual

Studio:

http://msdn.microsoft.com/pt-br/library/vstudio/sc65sadd.aspx
O cdigo acima ir compilar mesmo tendo duas variveis J no escopo
do mtodo Main. Note que a primeira varivel J foi declarada a nvel
Pgina 28 de 118

de classe e s ser eliminada quando a classe for destruda ( quando


o mtodo Main terminar sua execuo e o programa terminar ). No
exemplo, a varivel J declarada dentro do mtodo Main esconde a
varivel declarada a nvel de classe, e a sada do programa ser o
nmero 50.
Mas e se precisarmos acessar a varivel declarada no nvel de classe?
Nesse caso necessrio utilizar o nome da classe para informarmos
ao compilador que a varivel que ser acessada est declarada a
nvel de classe, como mostrado no cdigo a seguir:

A sada do programa ser o nmero 20.


Constantes
Como o prprio nome diz, uma constante uma varivel cujo valor
no pode ser alterado durante seu ciclo de vida. Para declarar uma
constante basta utilizar a palavra chave const na declarao da
varivel. Uma constante sempre deve ser inicializada no momento de
sua criao:
const int a = 100;
Constantes tem as seguintes caractersticas:

Devem ser inicializadas no momento da declarao e seu valor


no
pode
ser
alterado;

O valor de uma constante deve ser computado em nvel de


compilao, isso quer dizer que no permitido inicializar uma
constante
com
o
valor
de
uma
varivel;

Pgina 29 de 118

Constantes so implicitamente estticas e no permitido


utilizar a palavra chave static em sua declarao;

Existem pelo menos 2 vantagens na utilizao de constantes em um


programa:

Constantes ajudam a evitar erros. Se em algum local do


programa houver a tentativa de alterao do valor inicializado
na constante o compilador apresentar um erro, no permitindo
tal ao.

Constantes tornam os programas mais flexveis para alterao,


pois vrios locais do programa podem acess-las, e uma
simples alterao em seu valor pode alterar o comportamento
do
programa
inteiro,
poupando
tempo
e
evitando
inconsistncias em sua modificao.
VDEO AULA 04

Tipos de dados pr-definidos no C#


Agora que conhecemos variveis e constantes, veremos melhor os
tipos de dados disponveis no C#. Notaremos que o C# muito mais
rgido quanto utilizao de tipos do que outras linguagens de
programao.
Tipos por Valor e Tipos por Referncia
Antes de descobrir os tipos de dados disponveis no C#, importante
entender que o C# contm duas categorias de tipos de dados:

Tipos por Valor

Tipos por Referncia

A principal diferena entre as 2 categorias que os tipos por valor


guardam o valor diretamente, enquanto os tipos por referncia
guardam uma referncia para onde o valor est alocado. Tipos de
dados que trabalham por valor no C# so basicamente os tipos
menos complexos, como o int, float e bool.
Considere as variveis abaixo:
int i = 123;
string s = ol mundo;
Em memria, a representao das variveis acima funciona dessa
forma:

Pgina 30 de 118

Ou seja, i guarda o valor no prprio local de memria, j s aponta


para outro local de memria que contm o valor.
Tipos por valor so alocados em um local de memria chamado
de stack, e os tipos por referncia so alocados noheap.
importante saber quando um tipo trabalha por valor ou por referncia
pela diferena presente na atribuio de cada uma dessas categorias.
Por exemplo, int um tipo por valor, isso quer dizer que o cdigo
abaixo ir resultar em dois locais de memria alocando o valor 50:
int i = 50;
int j = i;
Saiba

que

so

ponteiros

na

programao:

http://pt.wikipedia.org/wiki/Ponteiro_%28programa
%C3%A7%C3%A3o%29
Porm, considere o cdigo abaixo:

O cdigo instncia um objeto da classe Coordenada. importante


entender que toda classe no C# um tipo que trabalha por
referncia. No cdigo acima apenas um objeto do tipo Coordenada foi
Pgina 31 de 118

criado. As duas variveis obj e obj2 apontam para o mesmo local em


memria onde est alocado o objeto. Como obj e obj2 so variveis
de um tipo que trabalha por referncia, a declarao das mesmas no
cria um novo objeto, apenas permite apontar para um objeto do tipo
Coordenada. Para criar um objeto necessrio utilizar a palavra
chave new. Como obj e obj2 apontam para o mesmo objeto,
qualquer alterao feita em obj ir alterar obj2, e vice-versa.
Seguindo
o
comportamento
descrito,
o
cdigo
mostrado
anteriormente retornar os valores 30 e 50 respectivamente.
Quando uma varivel de um tipo que trabalha por referncia
possvel indicar que ela no aponta para nenhum objeto atribuindo o
valor null:
Coordenada x = null;
Qualquer acesso a um membro do tipo Coordenada pela varivel
acima ir gerar uma exceo em tempo de execuo.
O CLR implementa um algoritmo para identificar se um objeto contm
referncias para o mesmo. Caso no exista nenhuma varivel
apontando para o objeto ele destrudo e a memria 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 tm uma melhor performance trabalhando por valor. J
tipos complexos que podem conter vrios campos, como as classes,
tm um melhor desempenho trabalhando por referncia.
Tipos por Valor pr-definidos
Como mencionado na unidade 1, os tipos de dados bsicos prdefinidos reconhecidos pelo C# no so exatamente da linguagem,
mas sim do .net Framework. Por exemplo, quando declaramos um int
no C#, na verdade estamos criando uma instncia 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:

Pgina 32 de 118

Tipos por Referncia pr-definidos


O C# contm dois tipos de dados pr-definidos que trabalham por
referncia, object e string como descrito na tabela abaixo:

O tipo object
Muitas linguagens de programao e hierarquia de classes contm um
tipo base, cujo todos os outros tipos de dados derivam. O C# no
exceo. No C# o tipo object o tipo base para todos os outros tipos
de dados definidos na linguagem, pr-definidos ou criados pelo
usurio. Isso quer dizer que o tipo object pode ser utilizado para
algumas situaes:

Para apontar para objetos de qualquer tipo de dados, por


exemplo, possvel empacotar um objeto que trabalha por
valor
para
mov-lo
do
stack
para
o
heap;

til para trabalhar com reflexo, tcnica utilizada quando


precisamos trabalhar com objetos de tipos desconhecidos;

O tipo object implementa alguns mtodos bsicos, como o


Equals, GetType e ToString, uteis em diversas situaes e
disponveis para todos os objetos no C#.

Considere o cdigo abaixo:

Pgina 33 de 118

Vdeo: Tipo Object


https://www.youtube.com/watch?v=KFE66HfPUFk&feature=youtu.be
Note que foram atribudos valores do tipo int, string e DateTime em
variveis do tipo object, isso perfeitamente possvel 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 flexvel em sua
utilizao, operaes como concatenao e cpia so efetuadas
naturalmente.

Apesar da forma de atribuio, string um tipo que trabalha por


referncia. Internamente o tipo string alocado no heap, e no no
stack, e quando uma varivel string atribuda a outra so criadas
duas referncias para o mesmo objeto. Apesar de ser um tipo por
referncia, 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 cdigo

Pgina 34 de 118

Vdeo: Concatenao de Strings


http://youtu.be/ZcU56qW8M4U
A sada desse programa ser:

Alterar o valor da varivel z1 no tem nenhum efeito na varivel z2,


ao contrrio do que seria esperado de um tipo que trabalha por
referncia. O que aconteceu foi que ao atribuir o valor isso uma
string na varivel z1, um novo objeto foi criado. Quando z2 foi
inicializada com o valor de z1, uma referncia ao mesmo objeto
apontado por z1 foi passada para z2. Quando o valor da varivel z1
foi alterado, ao contrrio de alterar a string original, um novo objeto
foi criado e alocado no heap para o novo valor, e a referncia de z1
foi alterada para apontar para esse novo objeto. z2 continuou
apontando para a string original.
Literais do tipo string so criados utilizando aspas duplas ( ), o uso
de aspas simples ( ) no C# utilizado para criar literais do tipo char
e causam erro em tempo de compilao se tentarem ser atribudas a
variveis do tipo string:

Pgina 35 de 118

Estruturas Condicionais
Estruturas condicionais permitem que um bloco de cdigo seja
executado apenas se uma ou vrias condies forem atendidas. O C#
tem duas estruturas para trabalhar com condies, a estrutura if, que
permite testar se uma condio especfica foi atendida, e o bloco
switch, que permite testar uma expresso com um diferente nmero
de valores.
Estrutura condicional if
O C# herdou a construo 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 instruo ser executada em qualquer uma das


partes condicionais, as chaves no so necessrias.

Pgina 36 de 118

Se necessrio, um bloco if pode no ter uma bloco else. Tambm


permitido combinar clusulas else if para testar mltiplas condies:
Exemplo:

Pgina 37 de 118

No h limite para o nmero 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 vrias opes.
Para criar o bloco necessrio passar um argumento para o switch
seguido de uma srie de clusulas case. Quando a expresso da
clusula switch encontra o respectivo case o cdigo segue
imediatamente para aquele case. Para cada case deve haver a
instruo break para que o bloco pare de ser executado. Tambm
possvel utilizar um case padro caso nenhum deles seja executado.
Pgina 38 de 118

O exemplo a seguir testa o valor da varivel x:

Note que os valores dos blocos case so constantes, variveis no


so permitidas.
Estruturas de repetio
O C# disponibiliza quatro estruturas de repetio ( for, foreach, while,
do...while) que permitem executar um bloco de cdigo quantas vezes
for preciso at uma certa condio ser em encontrada. O for, while e
do...while so basicamente iguais aos encontrados no c++.
Estrutura de repetio for

Pgina 39 de 118

O for um mecanismo para iterar sobre um loop onde testado se


uma condio ainda vlida para poder ser executado novamente. A
sintaxe a seguinte:
For(inicializador; condio; iterador)
Instrues
Onde:

O inicializador uma expresso a ser executada antes do loop


iniciar ( geralmente iniciando uma varivel para servir como
contador);

A condio a expresso a ser testada em cada iterao antes


do loop ser executado;

O iterador uma expresso a ser executada depois de cada


iterao ( geralmente um incremento do contador).

A iterao termina quando a expresso retorna false.


O for um excelente loop para repetir um bloco de cdigo em um
determinado nmero de vezes. O exemplo seguinte mostra um uso
tpico de um bloco for, imprimindo na tela todos os nmeros de 0 a
99:

Vdeo: foreach, uma alternativa ao for:


https://www.youtube.com/watch?v=Ys3_QVaAP5w
No exemplo acima foi declarada uma varivel i do tipo int e
inicializada com o valor 0. Essa varivel ser utilizada como contador
para o loop. A condio testa se o contador menor que 100. Essa
condio retornar true enquanto o contador for menor que 100. O
contador incrementado em cada iterao.
O exemplo retornar o seguinte resultado:
0

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
Pgina 40 de 118

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 repetio while


A estrutura de repetio while idntica ao while do C++ e Java. O
while tem uma sintaxe mais simples que o for pois necessrio
apenas uma expresso para utiliz-lo:
While(condio)
Instrues
Diferente da estrutura for, o while geralmente utilizado para repetir
um bloco de cdigo por um nmero de vezes desconhecido no
momento que o loop comea. Uma varivel de controle utilizada e
alterada no interior da estrutura para que a iterao termine:

Pgina 41 de 118

Estrutura de repetio do... while


O do...while funciona como o while, mas sua condio de parada
testada depois do loop ser executado. Isso quer dizer que o bloco de
cdigo ser executado pelo menos uma vez:

Pgina 42 de 118

Estrutura de repetio foreach


O foreach uma estrutura que itera sobre cada objeto de uma
coleo, no sendo necessrio trabalhar com ndices. Para que a
estrutura foreach consiga trabalhar com uma coleo ela deve
implementar a interface IEnumerable. Como exemplos de colees no
C# podemos citar arrays, as classes do namespace System.Collection
e colees criadas pelo usurio.
Considere o seguinte cdigo:

Pgina 43 de 118

Saiba

mais: O

que

so

Interfaces

http://www.linhadecodigo.com.br/artigo/2999/entendendointerfaces-com-csharp.aspx
O exemplo mostra uma iterao em um vetor de string utilizando a
estrutura foreach. Cada vez que executado o loop a varivel x
alterada para conter um elemento do vetor.
A inferncia de tipo muito utilizada em estruturas foreach:

A varivel 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
coleo no podem ser modificados dentro de uma estrutura foreach:

Pgina 44 de 118

O cdigo mostrado no ir compilar, pois x no pode ser modificado.

FRUM:
Como vimos nesta unidade a linguagem C# tem duas formas bsicas
de tipos de dados, por valor e referncia. Em sua opinio qual o
cenrio 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 diferenas na
escolha do tipo de dados e como esses tipos so gerenciados em
memria. Tambm foram mostradas as estruturas de repetio e
condicionais disponveis na linguagem, sua sintaxe e suas
similaridades com a linguagem C.

BUILT-in types table (C# reference). 2013. Disponvel em: <


http://msdn.microsoft.com/en-us/library/ya5y69ds.aspx >. Acesso
em: 28 fev. 2013.
Pgina 45 de 118

SUGESTES 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. Disponvel em: <
http://msdn.microsoft.com/en-US/library/vstudio/ms172157
>.
Acesso em: nov. 2012.
MSDN. Introduction to the C# language and the .NET
Framework.
Disponvel
em:
<
http://msdn.microsoft.com/library/vstudio/z1zx9t92 >. Acesso em:
nov. 2012.

Unidade 2 Introduo ao ASP.NET


VDEO AULA 01
Viso geral de uma aplicao WEB
Para comear a criar uma aplicao WEB primeiro devem estar claros
trs importantes tpicos:

Como funciona uma requisio HTTP;

O que o HTML e como ele funciona;

Como as requisies HTTP so 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 mximo cada mecanismo do desenvolvimento para
Internet.

Pgina 46 de 118

Requisies HTTP
O protocolo de comunicao utilizado pelos browsers para se
comunicar com qualquer site chamado de Hypertext Transfer
Protocol (HTTP).
O HTTP permite que um cliente (navegador) requisite uma pgina
para o servidor utilizando mtodos especficos para cada situao.
Entre os mais importantes esto os mtodos GET e POST.
A URL (Uniform Resource Locator) acima utilizada para recuperar os
dados do produto cujo identificador o 5. Quando os parmetros de
uma requisio so enviados na URL, como acontece com o cdigo no
caso acima, utilizada uma requisio do tipo GET. Quando uma
requisio pode ser executada vrias vezes (vrios usurios iro
acessar essa mesma pgina) recomendado que se use o mtodo
GET.
O mtodo POST recomendado para ser utilizado em formulrios
HTML como, por exemplo, na insero de uma nova notcia em uma
pgina. Como essa operao ir alterar o estado de um recurso no
servidor deve ser evitado utilizar o mtodo GET, pois essa operao
poderia ser executada facilmente pela URL, o que poderia causar
falhas de segurana. Tambm deve ser observado que uma requisio
feita utilizando o mtodo POST no altera o formato da URL, pois os
parmetros so enviados no corpo da requisio HTTP.
Hypertext Markup Language
O HTML uma linguagem de marcao utilizada para formatar
documentos, e todos os navegadores conseguem interpretar HTML.
A primeira verso do HTML utilizada em grande escala foi a verso
2.0. A verso 3.2 introduziu novos recursos como as tabelas e
applets. Atualmente o HTML se encontra na verso 5 e promete
revolucionar a forma como documentos so apresentados na WEB,
incluindo suporte nativo para udio, vdeo e outros recursos.
Ao trabalhar com ASP.NET veremos que ele gera a maior parte do
cdigo HTML que teramos que criar manualmente, mas importante
entender como funciona o HTML para ter um maior domnio sobre a
pgina gerada.
Pgina 47 de 118

Por exemplo, o cdigo HTML a seguir renderiza uma pgina com uma
lista de opes e um boto:

A figura abaixo mostra a pgina renderizada pelo navegador:

Vdeo: Introduo ao HTML 5


http://youtu.be/CHlp835aYz0
Internet Information Services (IIS)
No geral toda arquitetura voltada para aplicaes WEB funciona da
mesma forma. No importa que hardware ou software seja utilizado,
sempre ser necessrio algum software no servidor monitorando a
porta 80 para recuperar as requisies feitas pelo cliente. Quando
uma requisio detectada, trabalho do servidor responder da
forma esperada.
No Windows o servidor responsvel por receber requisies o IIS,
apesar de inicialmente no ser importante conhec-lo a fundo,
Pgina 48 de 118

interessante saber como ele funciona para fins de debug, testes e


publicao das aplicaes desenvolvidas em ASP.NET.
Para entender o papel do IIS, veremos a seguir como funciona uma
arquitetura cliente-servidor:

Inicialmente a mquina cliente faz uma requisio para o servidor


web pedindo o recurso clientes.aspx. O IIS juntamente com o mdulo
do ASP.NET interpreta a pgina e responde HTML para o cliente, a
linguagem que o navegador consegue interpretar.
Isso mostra que qualquer pgina desenvolvida em ASP.NET no ser
executada no lado cliente, pois o navegador no consegue interpretar
a pgina, para essa tarefa necessrio o IIS.

Introduo ao ASP.NET
O ASP.NET o framework da Microsoft para criar aplicaes para
Internet. o sucessor do antigo ASP e sua principal vantagem ter
disponvel todos os recursos do .net Framework, como segurana,
cdigo gerenciado e as diversas classes j existentes.
O ASP.NET totalmente integrado ao Visual Studio. Com isso nunca
foi to fcil desenvolver para WEB. O Visual Studio prov ferramentas
de design, uma toolbox para trabalhar com controles e recursos
poderosos para debug.
Pgina 49 de 118

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


ASP:

Melhor performance: O cdigo desenvolvido no ASP.NET


compilado pelo CLR, que fornece otimizao nativa do cdigo
atravs de um recurso chamado Just-In-Time, que compila
apenas
os
blocos
de
cdigo
necessrios;

Flexibilidade: Todas as classes do .net Framework podem ser


acessadas atravs de uma aplicao ASP.NET. Alm disso,
qualquer linguagem disponvel no .NET pode ser utilizada;

Configurao simplificada: Toda configurao de uma


aplicao em ASP.NET guardada em formato XML, logo
muito fcil fazer alteraes, como por exemplo alterar uma
string de conexo.

Existem diversas formas de se criar aplicaes em ASP.NET. Cada


uma delas segue padres para fins especficos, entre elas est o
ASP.NET Web Forms, tecnologia que veremos a seguir.
ASP.NET Web Forms
O ASP.NET Web Forms um padro de desenvolvimento baseado em
formulrios. similar ao desenvolvimento para aplicaes Windows,
contendo controles e tratamento de eventos, com isso o Web Forms
no traz um impacto to grande para desenvolvedores que sempre
trabalharam com aplicaes 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, fcil para entrada de desenvolvedores


Windows;

Gera grande parte do cdigo HTML e Javascript, tirando a


responsabilidade
do
desenvolvedor;

Separa o cdigo servidor do cdigo cliente, evitando confuso


na
manuteno;
Pgina 50 de 118

Contm recursos para reaproveitamento de cdigo como Master


Pages e User Controls, que sero discutidos mais a frente.

Criando a primeira aplicao em ASP.NET Web Forms


Vamos criar nossa primeira aplicao 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:
http://www.microsoft.com/visualstudio/eng/downloads#d-expressweb
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 opo WEB e na direita ASP.NET Web Forms Application:

Na mesma tela tambm podem ser alterados o nome do projeto e da


soluo, e onde eles sero salvos.
Veremos a seguir alguns dos diretrios 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 contm todos os elementos que compe o layout
de uma pgina, como arquivos CSS e imagens.
Images: Imagens que no fazem parte do layout das pginas e sim
do contedo.
Pgina 51 de 118

Scripts: Bibliotecas em
o JQuery e Modernizr.

so

alocadas

nesta

pasta,

como

Arquivos .aspx: pginas (web forms) adicionadas ao projeto, podem


ser excludas se necessrio. ASPX a extenso padro de pginas
ASP.NET.
Arquivos .config: Arquivos de configurao da aplicao, como
pacotes de estilo e javascript que sero utilizados, strings de
conexo, configuraes de autenticao e outros recursos.
Site.Master: Arquivo que representa uma Master Page, recurso
utilizado para reaproveitamento de cdigo, ser abordado em
detalhes posteriormente.
Saiba

mais: O

que

JQuery

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

mais: O

que

Modernizr

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

Criando a primeira pgina


Para criar uma pgina clique com o boto direito no nome do projeto,
logo depois em Add New Item, selecione a opo Web Form. Daremos
o nome de exemplo.aspx:
Dica: Caso no tenha sido dado um nome para o projeto no momento
de sua criao o nome padro ser WebApplication1.
Ao adicionar o Web Form deve ser observado:

Foi adicionado um arquivo exemplo.aspx, nesse arquivo deve


ser colocado apenas o cdigo necessrio para montar a
apresentao de contedo para o usurio (basicamente HTML
com
algum
cdigo
de
servidor).

O arquivo exemplo.aspx.cs ter todo o cdigo de servidor para


tratar a requisio do usurio. Basicamente uma classe com
mtodos para receber e tratar eventos.

Veremos a seguir o cdigo adicionado no arquivo exemplo.aspx:

Pgina 52 de 118

Pgina 53 de 118

No ASP.NET todo HTML que poder ser manipulado no servidor


precisa conter a propriedade runat=server. Deve ser observado que
todo o contedo de uma pgina ASP.NET contido dentro de uma
tag
com o atributo runat=server, ou seja, a pgina um
grande formulrio, da o nome Web Forms.
Vamos testar a pgina. Para isso clique com o boto direito na pgina
aspx e em seguida em View in Browser.Ser exibida uma pgina em
branco. O mais importante nesse ponto ver o cdigo fonte da
mesma:

Sobre o cdigo:
Podemos notar que foi apenas enviado para o cliente o contedo
esttico (HTML) e nenhuma instruo de servidor. Da pgina aspx
criada para o cdigo fonte gerado houve apenas uma diferena, a
adio 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 especfico.

Entendendo o ciclo de vida de uma pgina


importante entender que, quando uma pgina aspx requisitada
vrios processos so executados, entre eles alguns eventos e
Pgina 54 de 118

mecanismos para renderizar os controles do asp.net adicionados na


pgina.
Para poder rastrear o que acontece com uma pgina quando ela
requisitada basta adicionar a propriedade Trace nas configuraes da
pgina como mostrado abaixo:

Depois basta carregar a pgina e sero exibidas algumas informaes


como os eventos que foram executados e controles renderizados:

Tratando Eventos
Eventos so mtodos especiais que so executados quando uma ao
disparada. Uma pgina ASP.NET pode conter quantos eventos forem
necessrios,
Um dos eventos mais utilizados de uma pgina o Page_Load. Esse
evento executado quando uma pgina requisitada e carregada.
Para entender como o evento Page_Load funciona adicione a seguinte
tag em uma pgina aspx:

Pgina 55 de 118

Mas e se quisermos mostrar essa informao apenas quando o


usurio efetuar uma ao, como o clique de um boto?
Adicione as seguintes tags em uma pgina aspx:

Entendendo o PostBack
Verificamos anteriormente que um Web Form nada mais que um
grande formulrio contendo todos os elementos da pgina. Mas o que
acontece quando um desses elementos acionado? Por exemplo,
quando um boto pressionado?
Pgina 56 de 118

No modelo Web Form todo controle que adicionado na pgina e


pode disparar um evento utiliza um recurso da arquitetura
chamado PostBack. Um PostBack nada mais que um POST para a
mesma pgina, ou seja, uma requisio para o servidor para a
mesma pgina 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 usurio acessa a pgina que ir interagir;
2- Algum controle utilizado. Exemplo: Um boto clicado, um
campo de texto tem o contedo alterado, uma linha de um
componente de dados selecionada;
3- Um evento disparado automaticamente (utilizando Javascript), a
pgina enviada para o servidor;
4- O servidor carrega a mesma pgina (todo o ciclo de vida
realizado novamente) e o evento tratado.
5- A pgina enviada para o cliente
importante entender que nem toda requisio para o servidor um
PostBack. Quando um usurio acessa a pgina diretamente, ou um
redirecionamento executado, nenhuma dessas aes so
consideradas PostBack.

Pgina 57 de 118

Veremos no exemplo a seguir como descobrir se uma requisio foi


efetuada atravs de um postback:
ASPX:

Ao executar a pgina com o cdigo acima poderemos notar que


apesar da data atual ser atribuda ao pargrafo data no evento
Page_Load essa informao no apresentada na pgina quando ela
carregada. Isso acontece por que foi adicionada uma estrutura
condicional que testa se a pgina foi solicitada atravs de um
PostBack ou no.
A propriedade IsPostBack uma propriedade booleana da pgina
que tem o propsito de informar se a pgina est sendo solicitada
atravs de um PostBack. Se o acesso tiver sido realizado
diretamente, ou seja, fruto de um redirecionamento a propriedade
ter o valor False, caso contrrio True.

Pgina 58 de 118

Tambm importante notar que no momento que o boto for


pressionado o evento Page_Load ser disparado antes do evento
btnTestar_Click. Isso acontece porque o ciclo de vida da pgina
executado normalmente, no importando se um PostBack ou no.
Mantendo o estado da pgina com View State
Quando uma pgina da web solicitada ela enviada para o cliente
em seu estado inicial. Ao interagir com a pgina o usurio pode
modificar o estado dela alterando algumas informaes, como por
exemplo, digitando dados em um formulrio.
Ao enviar os dados para o servidor ele ir validar as informaes e
caso alguma coisa esteja incorreta a pgina dever ser enviada para
o cliente novamente para que corrija as informaes incorretas. Mas
um detalhe deve ser levado em conta, ao enviar a pgina para o
cliente o estado da pgina deve ser mantido, ou seja, todos os dados
que ele informou devem estar presentes na pgina, caso contrrio o
usurio ter que informar todos os dados novamente.
O ASP.NET conta com um recurso chamado de ViewState para manter
o estado da pgina, ou seja, quando um formulrio submetido para
o servidor, ele retorna para o cliente com todos os dados informados
sem que nenhum esforo do programador seja necessrio. Mas como
isso funciona?
Considere a seguinte pgina:
ASPX:

Pgina 59 de 118

Pgina 60 de 118

Ao clicar no boto Validar com um valor invlido no TextBox ( no


exemplo: NaN ) teremos o seguinte resultado:

Note que o valor do TextBox foi validado no servidor, a pgina foi


respondida para o cliente e o valor do TextBox foi mantido. Isso
acontece porque toda pgina em ASP.NET guarda o estado da pgina
em um campo hidden para que os dados no sejam perdidos em cada
requisio. Se observarmos o fonte da pgina iremos encontrar uma
tag com o padro abaixo:

View State e seu custo

Apesar do View State ser um poderoso recurso ele tem seus


custos:

Em cada pgina visitada os dados de todos os controles so


coletados e serializados em uma string codificada na base64.
Quando um postback efetuado executado o processo
inverso para resgatar as informaes e atualizar os respectivos
controles, gerando custo de processamento para o servidor;

O campo hidden que guarda os dados serializados gera


informaes extras que devem ser enviadas para o cliente.
Dependendo do tamanho do View State e da conexo do cliente
isso pode custar alguns segundos de download.

Saiba

mais: Codificao

Base64

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

Pgina 61 de 118

Redirecionamentos

Quando falamos de redirecionamentos deve ficar claro que


eles podem ser feitos em 2 locais:
1. Cliente: Atravs de Javascript;
2. Servidor: Pelo prprio ASP.NET
Quando um redirecionamento executado do lado do servidor o
recurso respondido no o recurso solicitado.
Como exemplo podemos citar uma pgina que necessita de
autenticao. Se o usurio no estiver logado o mesmo deve ser
redirecionado para uma pgina de login. Veremos essa situao no
exemplo abaixo:
CS:

No exemplo acima foi utilizada a instruo Response.Redirect para


redirecionar o usurio para a pgina login.aspx caso o usurio no
esteja logado.
importante notar que caso o usurio requisite o endereo
restrito.aspx ele ter como retorno a pgina login.aspx, isso
porque o navegador fica ciente no redirecionamento pois o servidor
retorna um status 302 ( Movido Temporariamente ) como mostrado
abaixo:

Pgina 62 de 118

Saiba

mais: Lista

de

cdigos

de

status

HTTP

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

FRUM:
Em sua opinio quais so as vantagens de uma aplicao WEB sobre
uma
aplicao
desktop?
Quais os desafios ao se construir uma aplicao para Internet,
levando em considerao o tipo de arquitetura e a grande quantidade
de variveis existentes nesse tipo de aplicao?

RESUMO:
Apresentamos nesta unidade os processos e tecnologias envolvidas
na construo de uma aplicao voltada para a Internet.
Foi introduzida a plataforma ASP.NET Web Forms, que nada mais
que um ambiente para construo de aplicaes WEB, vimos que seu
modelo de desenvolvimento muito parecido com o padro de
construo de aplicaes para desktop. Tambm conhecemos alguns
recursos importantes da plataforma, como o PostBack e View State.

Pgina 63 de 118

NETWORKS.
2013.
Disponvel
em:
http://jdjua.com/networking.htm >. Acesso em: 28 fev. 2013.

<

HOW postback events work in ASP.NET. 2013. Disponvel em: <


http://www.howtoasp.net/asp-net-tutorials/how-postback-eventswork-in-asp-net/ >. Acesso em: 28 fev. 2013.

SUGESTES DE LEITURA
SILVA, Maurcio Samy. Construindo sites com CSS e (X)HTML.
So Paulo: Novatec, 2008
SHEPERD, George. Microsoft ASP.NET 4 Step by Step. Redmond:
Microsoft Press, 2010
MSDN. ASP.NET
Reference. Disponvel
http://msdn.microsoft.com/pt-br/library/9k6k3k4a
%28VS.85%29.aspx >. Acesso em: nov. 2012.

em:

<

W3C. Architecture of the World Wide Web, Volume One.


Disponvel
em:
<
http://www.w3.org/TR/2004/REC-webarch20041215 >. Acesso em: nov. 2012

Unidade 2 Introduo ao ASP.NET


VDEO 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 disponveis no momento que um
projeto iniciado, isso porque a base do ASP.NET o .net
Pgina 64 de 118

Framework. Alm de uma ampla variedade de recursos para tratar


controles de entrada e sada de dados e requisies 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 contm classes para conectar, manipular e consumir um
banco de dados de forma rpida e simples.
Existem basicamente dois namespaces que proveem acesso base
de dados no ADO.NET:

System.Data.OleDb:
variedade
de

System.Data.SqlClient: Provedor especfico para trabalhar


com o banco de dados Sql Server.

Saiba

mais: Viso

Permite conectar
bancos

geral

em
de

do

Sql

uma

grande
dados.

Server

https://www.microsoft.com/sqlserver/pt/br/product-info/overviewcapabilities.aspx
Os 2 namespaces so 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)

Pgina 65 de 118

Podemos notar no esquema apresentado a similaridade entre as


classes disponveis para os 2 namespaces. Isso implica em uma
facilidade para migrar de um namespace para outro se for necessrio.
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 pgina 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 responsvel por gerenciar a


conexo com o banco de dados. Atravs dessa classe possvel
abrir, fechar e verificar o estado da conexo com o banco.

SqlCommand: Classe responsvel por configurar e executar


instrues
SQL
contra
o
banco.

SqlDataReader: Responsvel por fornecer um mecanismo


para consultar registros do banco de dados. Trabalha de forma
conectada, ou seja, enquanto a leitura for necessria a conexo
precisa
estar
aberta.

SqlDataAdapter: Representa um conjunto de comandos para


trabalhar com objetos do tipo DataSet.

DataSet
Veja no vdeo 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 aplicao ter a
representao do banco de dados em memria sem a necessidade de
estar conectado. Isso quer dizer que uma aplicao pode fazer as
modificaes necessrias em memria para posteriormente replicalas ao banco, permitindo dessa forma que o banco tenha mais
conexes disponveis para serem utilizadas.
Veremos a seguir como trabalhar com algumas das classes descritas
considerando a seguinte tabela:
Pgina 66 de 118

Nome: tbCliente
Colunas:
codigo
(int),
dataNascimento (datetime).

nome

(varchar),

cpf

(varchar),

O cdigo abaixo insere um cliente na tabela:


Classe Cliente:

Pgina 67 de 118

Entendendo o cdigo:
Primeiramente foi criada uma string que contm todos os dados para
abrir uma conexo, como caminho do servidor, nome do banco e
opcionalmente usurio e senha. importante notar que existem
vrios padres para construo de uma string de conexo. Para saber
o formato de string de conexo que deve ser utilizada para um banco
especfico acesse o site:
http://www.connectionstrings.com
Logo depois foi instanciado um objeto do tipo SqlConnection. Como
vimos anteriormente esse objeto ir abrir a conexo com o banco de
dados. O Objeto do tipo SqlCommand foi criado com a instruo SQL
para persistir o cliente no banco de dados, foram utilizados
parmetros para receber os dados.
Pgina 68 de 118

A instruo executada atravs do mtodo ExecuteNonQuery. Esse


mtodo retorna o nmero de linhas afetadas no banco de dados e,
caso algum erro ocorra, o mtodo Inserir retornar o valor -1.

Lendo dados da tabela


Considerando a mesma tabela do exemplo anterior veremos como
trazer dados do banco para a aplicao:

Pgina 69 de 118

Entendendo o cdigo:
Nesse exemplo foi utilizado o mtodo ExecuteReader que retorna um
objeto do tipo SqlDataReader que permite ler dados do banco. O
SqlDataReader contm um mtodo chamado Read que retorna um
valor booleano True enquanto existirem linhas para serem lidas,
dessa forma podemos facilmente utilizar uma estrutura de repetio
para ler todos os valores retornados pela instruo executada.

Entity Framework
Vimos anteriormente que muito fcil trabalhar com banco de dados
utilizando o ADO.NET. O problema do cdigo anterior que ele
trabalha com dados e no com objetos.
Atualmente a maioria dos bancos utilizados comercialmente trabalha
de forma relacional e seu modelo se baseia basicamente em dados
distribudos em tabelas, linhas e colunas.
O C# guarda as informaes em objetos, logo para enviar esses
dados para uma base relacional deve ser feito o mapeamento desses
dados. Esse trabalho pode gerar muito cdigo e custar um tempo
elevado de desenvolvimento.

Pgina 70 de 118

Para resolver esse problema surgiu o Entity Framework, responsvel


por fazer o mapeamento dos objetos da aplicao e envi-los para o
banco de dados, e vice-versa.
A figura abaixo mostra como o Entity Framework estruturado:

Figura Arquitetura do Entity Framework


Note que nesse modelo existe uma camada entre aplicao e o
ADO.NET. Essa camada o Entity Framework que fica responsvel em
mapear os objetos da aplicao 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 especficos do domnio. Ex: Produtos, Clientes;

Renova o modelo conceitual permitindo consultas diretamente


em entidades;

Libera as aplicaes da responsabilidade de tratar cdigo


especfico de uma fonte de dados particular;

Menor tempo de desenvolvimento: o framework fornece as


capacidades bsicas de acesso de dados para que os
desenvolvedores possam se concentrar na lgica do aplicativo.

Pgina 71 de 118

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 so 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.
Consiste na execuo de queries semelhantes s escritas em SQL e
permite consultas em colees 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.
Vdeo: Iniciando com LINQ
http://youtu.be/h4QpwdK-aqY
Tratando requisies GET/POST
Como vimos anteriormente uma requisio pode enviar dados para o
servidor de duas formas:
1. GET: Atravs da URL
2. POST: no corpo da requisio
No ASP.NET muito simples recuperar os dados enviados para a
aplicao, no importando o mtodo que foi utilizado.
Capturando via mtodo GET
Pgina 72 de 118

Ao final da execuo do exemplo acima a varivel id conter o valor


1.
Caso a pgina solicitada no informe um parmetro com nome id, o
valor da varivel ser null.
Mas e se a pgina solicitada contiver mltiplos parmetros? Por
exemplo: produtos.aspx?id=1&c=5&pagina=2? Nesse basta adicionar
uma instruo para cada parmetro, como ilustrado abaixo:

Capturando via mtodo POST

Pgina 73 de 118

O formulrio acima ir enviar os dados para a pgina default.aspx


que ir capturar as informaes utilizando o seguinte cdigo:

Lembrando que, se algum dos inputs do formulrio no definir um


valor para o atributo name, no ser possvel capturar o valor desse
campo no servidor:

Pgina 74 de 118

Recursos para Layout


Vamos ver em seguida alguns recursos poderosos disponveis no
ASP.NET para aproveitamento e customizao de Layouts: Master
Pages, User Controls e Temas.

Master Pages

A maioria dos sites da web trabalha com uma estrutura padro que
utilizada para todas as pginas, sendo assim apenas o espao para
informaes alterado dependendo da seo acessada.
Considere o site
abaixo: http://www.freewebsitetemplates.com/preview/skitemplate/

Pgina 75 de 118

Analisando o site apresentado podemos perceber que ele contm


partes que sero repetidas em vrias pginas, como o topo, menu e
rodap.
Copiar e colar esses elementos em todas as sees do site seria uma
estratgia ruim, pois a manuteno se tornaria praticamente
impraticvel.
Para resolver esse problema o ASP.NET contm um recurso chamado
Master Page. Uma Master Page uma pgina que contm os
elementos que estaro presentes em todas as sees do site, dessa
forma esses elementos estaro centralizados em apenas um arquivo,
tornando o processo de alterao simples e rpido.
Vdeo: Trabalhando com Master Pages
http://youtu.be/_AN18ubz-xo

User Controls

Como vimos a Master Page um recurso poderoso para evitar


repetio de cdigo em um projeto, mas ela no ideal para todos os
cenrios, como por exemplo reaproveitamento de funcionalidades em
sites diferentes.
Vamos tomar como exemplo o calendrio abaixo:
Pgina 76 de 118

Um calendrio pode ser til em sites de diversos setores, como sites


que precisam controlar eventos e sites educacionais.
O ASP.NET dispe de um recurso chamada User Control para permitir
a criao de controles com funcionalidades que podem ser utilizadas
em mais de um projeto, permitindo assim criar uma ToolBox com
controles personalizados pelo usurio.
Um User Control um arquivo .ascx que contm a seguinte
diretiva:

Saiba

mais: Conceitos

Exemplo

Prtico:

User

Control

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

Temas

Temas so uma coleo de estilos que podem ser aplicados em


controles ou at mesmo em todas as pginas de um site. A grande
Pgina 77 de 118

vantagem de se utilizar Temas a possibilidade de centralizar cdigos


voltados aparncia em apenas um local, tornando rpido o processo
de alterao.
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 boto direito no
projeto e acessar o menu: Add -> Add ASP.NET Folder -> Theme
como mostrado abaixo:

Temas podem conter vrios tipos de arquivos para modificar a


aparncia de elementos da pgina, 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 pginas dentro do escopo do Tema acima tero a cor de


fundo amarelo e as outras regas aplicadas.
Arquivos SKIN
Um arquivo .skin nada mais que um conjunto de definies que
sero aplicados a controles do ASP.NET, por exemplo:
Pgina 78 de 118

O cdigo acima define que todo controle


Tambm possvel 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
Pgina

Global

Um Tema global ir modificar a aparncia de todas as pginas e


controles de um site. Para aplicar um tema globalmente deve ser
inserida a seguinte configurao na seo System.Web do arquivo
Web.config:

Pgina

Para identificar que uma pgina em especfico ir utilizar um tema


basta adicionar a propriedade Theme na diretiva do Web Form:

Dessa forma apenas a pgina WebForm1 ter o tema aplicado.


Internacionalizao
Ao criar um site devemos nos preocupar em conseguir atender o
mximo de usurio possvel e uma forma de alcanar esse objetivo
disponibilizar as pginas no idioma dos visitantes.
Uma forma muito utilizada criar uma pgina para cada idioma em
que queremos disponibilizar contedo, mas esse processo
demorado e consequentemente custoso. Alm disso torna difcil o
processo de manuteno.
O ASP.NET permite criar arquivos especiais para guardar dados em
idiomas diferentes, em cada requisio do usurio o ASP.NET verifica
a preferncia do visitante baseado em seu navegador e apresenta os
dados no idioma correto.

Pgina 79 de 118

Arquivos Resource
Um arquivo Resource um arquivo XML que contm 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 extenso .resx e devem ser nomeados de


acordo com o idioma que o arquivo representa, como mostrado
abaixo:
MeuResource.resx Arquivo padro
MeuResource.pt-BR.resx Portugus Brasil
MeuResource.en-uS.resx Ingls Estados Unidos
MeuResource.en.resx Ingls
Note que o primeiro arquivo no tem nenhuma definio de idioma,
isso porque caso o usurio acesse o site com uma configurao de
idioma que no esteja na lista (como Espanhol) o arquivo padro ser
escolhido.
Note que possvel criar arquivos de idiomas especficos para certas
regies como no caso do Ingls Estados Unidos ou apenas para o
idioma.
Para uma lista completa de idiomas acesse o link abaixo:
http://www.csharp-examples.net/culture-names/

Pgina 80 de 118

Arquivos Resource podem ser adicionados em duas pastas:


App_GlobalResources e App_LocalResources como ilustrado abaixo:

Local Resources
Um Local Resource um arquivo que pode ser utilizado em apenas
uma pgina ASP.NET e deve ser associado ao Web Form da seguinte
forma:
Web Form: default.aspx
Resources:
default.aspx.en.resx -> Ingls
default.aspx.pt-br.resx -> Portugus Brasil
Para utilizar na pgina basta utilizar a sintaxe:

Global Resources
Podem conter qualquer nome seguindo o padro mostrado
anteriormente e podem ser utilizados em qualquer pgina da
aplicao. Segue um exemplo de utilizao:

Pgina 81 de 118

Saiba

mais: Lendo

resources

automaticamente

http://www.devmedia.com.br/globalizacao-lendo-resourcesautomaticamente/6428
Em sua opinio qual a vantagem da utilizao de recursos para
reaproveitamento de layout e da internacionalizao de um site?

RESUMO:
Vimos nesta unidade como trabalhar com dados provindos de um
banco atravs do ASP.NET, alm de recursos poderosos como o Entity
Framework e o LINQ. Tambm foram apresentadas tcnicas para
trabalhar com a parte visual de um site e como deix-lo disponvel
para pessoas do mundo inteiro utilizando internacionalizao.

VISO geral e breve anlise do ADO.NET entity framework. 2013.


Disponvel
em:
<
http://msdn.microsoft.com/ptbr/data/aa937709.aspx >. Acesso em: 28 fev. 2013.
MARCORATTI.net. ADO.NET roteiro bsico e boas prticas.
2013. Disponvel em: < http://www.macoratti.net/adn_bpu1.htm >.
Acesso em: 28/02/2013.

SUGESTES DE LEITURA
SILVA, Maurcio Samy. Construindo sites com CSS e (X)HTML.
So Paulo: Novatec, 2008
SHEPERD, George. Microsoft ASP.NET 4 Step by Step. Redmond:
Microsoft Press, 2010

Pgina 82 de 118

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

em:

<

W3C. Architecture of the World Wide Web, Volume One.


Disponvel
em:
<
http://www.w3.org/TR/2004/REC-webarch20041215 >. Acesso em: nov. 2012

Unidade 3 Introduo ao Padro MVC com ASP.NET


VDEO AULA 01

Quando falamos de sistemas computacionais geralmente


nos deparamos com o seguinte cenrio: um banco de dados
fornecendo informaes para serem apresentadas para o usurio. Na
web esse cenrio no muda. Quando entramos em um site estamos
solicitando informaes para uma aplicao, que deve buscar esses
dados em uma fonte e ento apresent-los em uma interface
amigvel. Quando temos que desenvolver uma aplicao que deve se
comportar dessa forma, somos inclinados a escrever o cdigo de
acesso a banco no mesmo local do cdigo da interface, buscando
melhor desempenho e pouco cdigo. Mas ser que essa a melhor
Pgina 83 de 118

forma de desenvolvimento para essa situao? Temos que pensar que


interfaces mudam mais frequentemente que regras de negcio. Dessa
forma toda alterao referente interface seria difcil por estar
amarrada a cdigo de acesso a banco e regra de negcio.
Mas como podemos resolver esse problema?
Para responder essa pergunta devemos entender as variveis
existentes no contexto desse tipo de aplicao:

Como dito anteriormente interfaces tendem a mudar


constantemente, principalmente quando falamos de WEB.
Pginas podem ser alteradas vrias vezes em um curto perodo
de tempo para proporcionar uma melhor experincia para os
usurios;

Dados podem ser disponibilizados de muitas formas, por


exemplo, notcias podem ser disponibilizadas na web em HTML,
para serem visualizadas em navegadores, mas tambm podem
estar disponveis em XML ou JSON para serem consumidas por
aplicativos
cliente;

Interfaces tendem a ser mais dependentes dos dispositivos que


iro apresenta-las, por exemplo, um sistema pode ter um
excelente design para rodar em um desktop, mas o mesmo
design
no
funciona
em
um
celular;

Criar interfaces para o usurio final e regras de negcio so


tipos de trabalhos para profissionais diferentes, logo
necessrio ter uma equipe com profissionais de diferentes reas
para trabalhar com esse tipo de aplicao.

Saiba

mais: Serializao

JSON

http://www.json.org/json-pt.html
Note que todos os pontos citados tem alguma relao com a
apresentao final para o usurio, isso porque as regras de negcio
de uma aplicao so pouco alteradas se comparadas com a
interface. Logo elas devem ser separadas de alguma forma para
facilitar a manuteno de cdigo e permitir futuras extenses da
aplicao.

Pgina 84 de 118

Padro MVC
O MVC (Modelo-Viso-Controle) um padro de desenvolvimento que
separa a interface, as regras de negcio e as aes disponveis na
aplicao em 3 diferentes mdulos:

Modelo: O modelo responsvel por gerenciar os dados e o


comportamento de uma aplicao, disponibiliza informaes
sempre
que
solicitado.

Viso: A viso tem como nico objetivo montar a apresentao


das
informaes
para
quem
solicitou.

Controle: O controle tem como responsabilidade receber


solicitaes, sejam elas atravs de um mouse ou teclado ( caso
o contexto permita ) ou uma simples requisio WEB, alertar o
modelo sobre a solicitao e escolher uma viso para
apresentar o resultado da ao.

O padro MVC especifica uma separao clara das responsabilidades


da aplicao, permitindo dessa forma um baixo acoplamento entre as
partes, ou seja, cada elemento depende o mnimo possvel um do
outro. Essa separao permite dividir uma aplicao em 3 partes,
diminuindo a complexidade do todo pois permite o desenvolvedor
focar em um mdulo sem depender do outro.
Figura Modelo MVC

Pgina 85 de 118

Fonte: ASP.NET (2013)


importante entender que o modelo no dependente em nenhum
nvel do controle ou da viso. Dessa forma possvel construir a
lgica de negcio da aplicao sem se preocupar com a apresentao.
Existem algumas variaes do padro MVC, como o MVP (ModelView-Presenter), veja no link abaixo como funciona esse padro:
Saiba

mais: Padro

MVP

http://imasters.com.br/artigo/18683/dotnet/mvp-e-aspnetintroducao-ao-passive-view/
VDEO AULA 02

ASP.NET MVC
O ASP.NET MVC um framework que contm todos os recursos
disponveis no ASP.NET, permitindo criar aplicaes WEB ricas
utilizando o padro MVC.
Algo que deve ficar claro que o ASP.NET MVC no veio para
substituir o j consolidado ASP.NET Web Forms, e sim para adicionar
uma nova forma de construir aplicaes web poderosas utilizando a
plataforma .NET.
Pgina 86 de 118

Vdeo: MVC ou WebForms:

http://youtu.be/GYxQSIjftqs
Com a incluso do ASP.NET MVC como mais uma opo 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 utilizao de um padro, separando responsabilidades e


tornando
o
cdigo
mais
claro
para
manuteno.

Facilita

Permite o desenvolvedor ter o controle total do que ser enviado para


o cliente.

testes

por

ser

uma

arquitetura

simples.

Veremos a seguir um resumo do papel de cada camada do ASP. NET


MVC:

Modelo
Temos no modelo basicamente classes de domnio (que representam
o negcio) e classes para acesso a fonte de dados. O modelo
responsvel por passar os dados para o controle.
Uma forma de se construir o modelo a utilizao do Entity
Framework, que alm de criar as classes de domnio tambm cria
todas as classes necessrias para acesso aos dados que representam
essas classes.

Viso
A viso responsvel por apresentar os dados da forma solicitada.
Quando falamos de WEB geralmente essa apresentao feita
atravs de HTML, CSS e Javascript.

Pgina 87 de 118

No ASP. NET MVC uma Viso construda utilizando um mecanismo


chamado de View Engine. Uma View Engine uma sintaxe especial
disponvel para construir uma Viso.
Existem diversas View Engines disponveis para serem utilizadas no
ASP.NET MVC, mas a mais utilizada atualmente chamada Razor.
Veremos em detalhes as Views Engines no tpico sobre Vises.

Controle
O Controle responsvel por receber as requisies dos clientes e
mape-las para mtodos chamados de aes. O papel das aes
pedir as informaes requisitadas para o modelo e devolve-las para
as vises.
importante entender que as Aes devem ter responsabilidades
nicas e geralmente so compostas por pouco cdigo. Se voc notar
que uma ao 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 domnio e
de persistncia de dados. Classes podem ser criadas de diferentes
formas, entre elas as j conhecidas classes POCO (Plain Old CLR
Object) e atravs do Enttiy Framework, que alm de j criar as
classes chamadas de Entidades, tambm j as vinculam a uma fonte
de dados.

Pgina 88 de 118

O Entity Framework Code First permite que criemos classes POCO,


essas classes so mapeadas para o banco de dados atravs de um
recurso chamado de Data Anotations, que nada mais so que
atributos para informar como uma classe e suas propriedades devem
ser mapeadas.
Veremos abaixo a representao de classes utilizando os recurso do
Data Anotations:

O cdigo acima representa duas Entidades: Produto e Categoria. No


existe nada de diferente com relao ao cdigo que utilizvamos 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 necessrio adicionar
instrues para configurar como essas propriedades sero mapeadas,
nesse momento que entra os Data Anotations.

Pgina 89 de 118

Cada um dos atributos adicionados na classe adicionam uma


configurao para o mapeamento: Key marca a propriedade como
chave primria, Required seta a propriedade como no nula, e
assim por diante.
Saiba

mais: A

importncia

do

Data

Annotation

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

Mas as classes acima sozinhas no sero mapeadas para o banco.


Para isso precisamos de uma classe auxiliar que ir fazer esse
trabalho:

A Classe Contexto criada acima ser responsvel por criar o banco


de dados caso ele no exista, por herdar de DbContext ela j tem
todos os recursos necessrios 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 conexo que foi criado no
arquivo de configurao App.config como mostrado abaixo:

Pgina 90 de 118

Saiba

mais: Usando

Arquivos

de

Configurao

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

Vises
Uma viso no ASP.NET MVC composta basicamente de 2 tipos de
elementos:
- Estticos: a parte da viso que enviada diretamente para o
cliente sem nenhum tipo de processamento, entre ele podemos citar
o HTML, CSS e Javascript (esse ultimo sendo dinmico apenas no
cliente).
- Dinmicos: a seo da viso que processada no servidor antes
de ser enviada para o cliente, geralmente o resultado do
processamento gera contedo esttico para ser enviado para o
cliente.
Para criar contedo dinmico em vises no ASP.NET utilizamos um
conceito chamado de View Engine. Uma View Engine um mdulo
plugvel do ASP.NET, ou seja, pode ser substituda por outra. A
diferena bsica entre as diferente View Engines disponveis a
sintaxe utilizada por cada uma delas. Cada View Engine utiliza uma
sintaxe diferente para construo do contedo dinmico em uma
Viso, isso quer dizer que a escolha da View Engine ir impactar
Pgina 91 de 118

diretamente em como as Vises da sua aplicao devero ser


escritas.
A View Engine padro do ASP.NET conhecida como ASPX, suas
extenes de arquivo geralmente so:
- aspx: pginas/vises;
- ascx: user controls;
- master: master pages.
Para entendermos qual o papel da View Engine vamos analisar o
cdigo abaixo:

No exemplo acima foi utilizado o tipo DateTime, saiba mais sobre ele
no
link
abaixo:
http://msdn.microsoft.com/ptbr/library/vstudio/system.datetime.aspx

Podemos notar no exemplo acima a presena do delimitador


.
Esse delimitador responsvel por marcar o comeo e trmino do
cdigo que ser processado no servidor, gerando contedo esttico
que ser enviado para o cliente.
Ainda no exemplo acima temos a presena de duas expresses
dentro dos delimitadores do ASPX, so elas:

Se considerarmos que a varivel nome contm o valor Joo e a


data/hora atual do servidor seja 01/01/2013 12:00:00 teremos o
seguinte resultado para o cliente:

Pgina 92 de 118

Algo que devemos notar que para cada bloco de cdigo dinmico
utilizando a View Engine ASPX devemos ter pelo menos 4 caracteres
() para delimitar o comeo e fim do bloco. O uso desses caracteres
pode tornar o cdigo de difcil leitura caso a Viso contenha uma
quantia considervel de contedo dinmico.

Para resolver o problema mostrado acima foi criada uma nova View
Engine chamada Razor. O Razor contm uma sintaxe mais simples e
inteligente e est sendo amplamente utilizada no ASP.NET MVC.
Para efeito de comparao entre as duas View Engines, veremos
como ficaria o exemplo mostrado anteriormente utilizando o Razor:

O Razor utiliza o caractere @ para marcar o incio do bloco e no


necessita de um delimitador para fechar o bloco, ou seja, ele
esperto o bastante para identificar quando o bloco terminou e
contedo esttico (html) comeou.
Vamos ver alguns cenrios onde o Razor pode ser aplicado:
Estruturas de repetio:
Vejamos um exemplo de um bloco foreach na sintaxe do Razor:

Note que dentro do bloco foreach temos marcaes HTML. No foi


necessrio terminar o bloco para inserir o contedo que ser
repetido, como mostrado anteriormente o Razor sabe diferenciar
cdigo de servidor de cdigo do cliente na maioria dos cenrios.
O mesmo padro pode ser aplicado para outras estruturas de
repetio como o for ou while.
Ateno para o seguinte detalhe
Considere o cdigo abaixo:

Pgina 93 de 118

O cdigo acima ir gerar um erro pois a sintaxe do Razor ir entender


que Cliente um cdigo de servidor (C#) e no um literal, para
resolver esse problema pode ser utilizada uma tag HTML para
envolver o contedo:

Estruturas condicionais:
As estruturas condicionais so escritas utilizando o mesmo padro
mostrado anteriormente nas estruturas de repetio, veremos abaixo
um exemplo utilizando uma estrutura if:

Mltiplas linhas de cdigo

Pgina 94 de 118

Conhea

outras

View

Engines

no

link

abaixo:

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

Layouts
O ASP .NET 2.0 introduziu o conceito de Master Pages que permite
uma aplicao WEB definir uma estrutura visual padro onde todas as
pginas iro herdar, tornando o processo de alterao simples e
rpido.
O Razor utiliza esse mesmo conceito, simplificando ainda mais o
processo nomeado de Layout. Um Layout pode conter cdigo esttico
e dinmico que ser aproveitado por todas as outras pginas.
Veremos no exemplo abaixo como um Layout pode ser construdo:

Pgina 95 de 118

O cdigo acima ser apresentado em todas as Vises que utilizarem o


Layout, o contedo especfico de cada Viso ser inserido no local que
contm a instruo @RenderBody().
Para especificar que uma Viso ir utilizar um Layout basta utilizar o
seguinte cdigo:

Onde nome_do_layout.cshtml deve ser substituido pelo nome dado


ao Layout da sua aplicao.
Considere o seguinte Layout e Viso:
layout1.cshtml

Resultado enviado para o cliente:


O resultado para o cliente caso a viso home seja mostrada ser o
HTML abaixo:

Pgina 96 de 118

Conhea

recurso

de

Sees

no

Razor

http://weblogs.asp.net/scottguportuguese/archive/2010/12/30/aspnet-mvc-3-layouts-e-secoes-com-o-razor.aspx?
utm_source=feedburner&utm_medium=feed&utm_campaign=Feed
%3A+scottguportuguese+%28ScottGu%27s+Blog+em+Portugu
%C3%AAs%29

Controles
Controles
so
classes
derivadas
da
classe
System.Web..Mvc.Controller e so basicamente compostas de Aes.
Aes so mtodos invocados quando uma requisio disparada.
Considerando essa URL uma ao chamada Detalhes do controle
Cliente ser invocada.
Uma ao definida como um mtodo pblico em um controle,
importante saber que todo mtodo pblico dentro de um controle
automaticamente considerado uma ao e exposto para qualquer
usurio que tenha conhecimento da correta URL para invoca-lo.

Pgina 97 de 118

Aes retornam resultados do tipo Action Result. Um Action Result


pode representar vrios tipos de resposta, como uma Viso, um
arquivo ou at mesmo um redirecionamento.
Seguem abaixo alguns dos tipos derivados de ActionResult que
podem ser retornados por uma ao:

ViewResult HTML, CSS, Javascript e outras marcaes existentes


em
uma
pgina
WEB.

JsonResult Dados serializados em JSON (Javascript Object


Notation), muito utilizados em aplicativos clientes que utilizam AJAX.

RedirectResult

ContentResult Representa um texto.

Representa

um

redirecionamento.

Veja todos os tipos derivados de ActionResult no link abaixo:


http://msdn.microsoft.com/enus/library/system.web.mvc.actionresult%28v=vs.108%29.aspx
Vejamos abaixo um controle com uma ao com retorno do tipo
ViewResult:

O retorno do mtodo View() do tipo ViewResult apesar de a


assinatura da ao Index() ser do tipo ActionResult. Isso possvel
porque ViewResult derivada da classe ActionResult.
Segue outro exemplo:

Pgina 98 de 118

O exemplo acima retorna um redirecionamento para outra ao


atravs do mtodo RedirectToAction().
Caso uma ao retorne um tipo que no 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 mtodo acima retornar um ContentResult, o mesmo resultado


poderia ser alcanado da seguinte forma:

FRUM:
Considerando os conceitos apresentados, cite as vantagens que voc
identificou quanto a utilizao o padro MVC para o desenvolvimento
na WEB. Quais os cenrios ideais para utilizao do ASP.NET MVC?

RESUMO
Vimos nesta unidade como o padro MVC estruturado e suas
grandes
vantagens
quando
aplicado
adequadamente
no
desenvolvimento de aplicaes para WEB.
Foi apresentada a tecnologia ASP.NET MVC, o framework que utiliza
todos os recursos j existentes no ASP.NET aplicado ao padro MVC,
Pgina 99 de 118

como funcionam suas partes (Modelo,Viso e Controle) e como


constru-las utilizando recursos como o Entity Framework e a View
Engine Razor.

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

SUGESTES DE LEITURA
LOUREIRO, Henrique. C# 4.0 com Visual Studio 2010. Lisboa:
FCA, 2011
MSDN. ASP.NET
MVC
Overview. Disponvel
em:
http://msdn.microsoft.com/enus/library/dd381412%28v=vs.108%29.aspx >. Acesso em:
2012.

<
nov.

MSDN. ASP.NET
MVC
3
Razor.
Disponvel
em:
<
http://msdn.microsoft.com/enus/vs2010trainingcourse_aspnetmvc3razor.aspx >. Acesso em: nov.
2012
PALERMO, Jeffrey; Scheirman, Ben; Bogard, Jimmy. ASP.NET MVC
em Ao. So Paulo: Novatec, 2010

Pgina 100 de 118

Unidade 3 ASP.NET MVC - Parte 2

Como criar um Projeto em ASP.NET MVC


Veremos abaixo como criar um projeto para comearmos 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.
Todos os produtos citados podem ser baixados no link abaixo:
http://www.microsoft.com/visualstudio/eng/products/visual-studioexpress-for-web
Pgina 101 de 118

Crie um novo projeto conforme o modelo abaixo:

Ao criar o projeto ser apresentada a seguinte tela:

Pgina 102 de 118

A tela acima pede para ser selecionado um template para o projeto.


Dependendo da opo selecionada arquivos adicionais podem ou no
ser inseridos no projeto, deve ser levado em conta o contexto da
aplicao para selecionar o template, por exemplo, se a opo
Internet Application for selecionada sero adicionados arquivos para
autenticao e controle de usurio, funcionalidades que geralmente
se aplicam a esse tipo de cenrio.
Iremos selecionar a opo Basic que ir adicionar apenas os arquivos
bsicos para o funcionamento do projeto.
Nessa tela tambm dever ser selecionado a View Engine padro para
construo das Vises, selecione a opo Razor.
Ainda nessa tela temos a opo de criar um projeto para testes da
aplicao, marque a caixa Create a unit teste projectse esse for o
caso.
Saiba

mais: Testes

Unitrios

http://msdn.microsoft.com/ptbr/library/ms182515%28v=vs.90%29.aspx
Esses so os passos necessrios para criar um projeto com a
estrutura bsica para comear a desenvolver, Veremos a seguir
alguns conceitos importantes para entender como o ASP.NET MVC
trabalha com requisies.
Roteamento
O ASP.NET MVC contm um importante sistema de roteamento para
conseguir mapear uma requisio provinda de um cliente para algum
local que ir tratar e responder essa requisio.
Toda requisio no ASP.NET MVC mapeada para uma Ao de um
Controle e a URL informada ir determinar quem ir tratar essa
requisio.
Quando criamos uma aplicao em ASP.NET MVC esta j contm uma
configurao padro de roteamento para conseguir mapear
requisies. O arquivo padro para configurao das rotas chamado
de Global.asax.
Pgina 103 de 118

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 so executados do
momento que o cliente pede uma pgina at o retorno do servidor:
1- A requisio feita ao servidor;
2- O roteamento do ASP.NET verifica se a requisio se encaixa em
uma das regras definidas e escolhe o controle apropriado;
3- O Controle pede as informaes requisitadas para o modelo;
4- O Modelo busca as informaes da base de dados e retorna ao
Controle;
5- O controle envia os dados para a Viso que por sua vez
respondida ao cliente;
Para entendermos como as configuraes de roteamento funcionam,
veremos o exemplo do mapeamento padro abaixo:
Pgina 104 de 118

O cdigo acima consegue mapear requisies nos padres 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
configurao
da
rota
existe
a
seguinte
seo: {controller}/{action}/{id}, esse o padro esperado
para uma URL. Vamos considerar a URL abaixo:
http://www.meusite.com.br/cliente/deletar/5
Na URL acima temos os seguintes elementos:
Domnio: meusite.com.br
Controle: cliente
Ao: deletar
Parmetro: 5
Ou seja, ao receber a requisio acima ser procurado um controle
com nome Cliente, nesse controle dever existir uma Ao chamada
Deletar, e para essa Ao ser passado o valor 5.
Tambm devemos nos atentar a seguinte seo da configurao:
new { controller = "Home", action = "Index", id = "" }, esse
um objeto annimo que representa valores padres caso algum (ou
nenhum) dos valores seja informado. Caso o parmetro no seja
informado uma string vazia ser enviada para a ao, se ela tambm
no for informada ser escolhida uma com nome Index, e por fim se
o controle no for informado ser selecionado o controle Home.

Pgina 105 de 118

Saiba

mais: Tipos

Annimos

http://msdn.microsoft.com/pt-br/library/vstudio/bb397696.aspx
Para entender melhor vejamos os exemplos abaixo:

Note que para cada valor no informado um valor padro escolhido.

Criando rotas personalizadas


Para aplicaes pequenas o esquema de roteamento padro
suficiente, mas existem alguns casos onde haver necessidade de
utilizar outros tipos de padro de URL, nesses casos ser necessrio
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 perodo. Para permitir essa funcionalidade na rota
padro teramos que utilizar algo parecido com a URL abaixo:
Considerando a URL acima teramos um controle chamado Arquivo
e uma ao Listar recebendo um parmetro representando a data
pela qual os dados devem ser filtrados.
Mas e se quisermos uma URL no seguinte padro?
Isso seria um problema pois o roteamento consideraria que o valor
11-2012 a ao desejada, e no um parmetro.
Para corrigir o comportamento permitindo um novo padro de URL
devemos adicionar mais um padro no arquivo Global.asax conforme
mostrado abaixo:
Pgina 106 de 118

Importante: Uma aplicao no est limitada a um nmero mximo


de padres de rotas, mas a ordem que elas so definidas ir impactar
diretamente no mapeamento realizado pela aplicao.
Vamos considerar uma aplicao com os 2 mapeamentos abaixo:

Caso a URL seja acessada o primeiro padro de rota acima ser


escolhido e no o segundo como esperado, isso porque as rotas so
analisadas sequencialmente de cima para baixo, o primeira padro
que se encaixa a URL informada escolhida.
Isso quer dizer que caso a rota padro seja mantida na aplicao ela
dever ser deixada por ltimo, caso contrrios as rotas customizadas
sero ignoradas.
Por fim, o arquivo Global.asax ficaria da seguinte forma:

Pgina 107 de 118

Sesso
A seo no ASP.NET um recurso utilizado para guardar informaes
do usurio que devem ser mantidas entre as requisies ao servidor.
Como exemplo podemos citar uma aplicao web que contm um
sistema de autenticao. Nesse sistema o usurio deve se logar
atravs de um formulrio e em cada requisio posterior o servidor
deve reconhecer o usurio sem a necessidade de um novo login.
Para entender como funciona o recurso de sesso no ASP.NET vamos
primeiramente entender o problema que ele veio resolver atravs do
exemplo abaixo:

Pgina 108 de 118

View:

O exemplo acima se baseia em um formulrio para entrada de


nmeros, em cada envio ao servidor somado o novo valor ao campo
soma que serve como um acumulador. A soma respondida para o
cliente atravs de um componente Literal.
Sabendo do funcionamento da pgina podemos deduzir que o
resultado final se o usurio informar os valores 200, 50, 20 ser de
270. Esse no ser o resultado pois cada requisio tratada de
forma independente, ou seja, o estado no se mantm. Isso quer
dizer que cada clique no boto 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:

Pgina 109 de 118

No exemplo acima foi utilizada uma sesso para manter o estado da


soma. Note que para guardar ou resgatar um valor da sesso basta
utilizar o nome Session seguindo da chave de identificao entre [].
Uma sesso que no existe criada no momento em que
adicionado um valor pela primeira vez, sem necessidade de cdigo
adicional:

Toda sesso tem um tempo de expirao, ou seja, depois de um


determinado intervalo ela descartada pelo servidor. O timeout
padro das sesses no ASP.NET de 20 minutos, esse tempo pode
ser alterado no Web.Config da seguinte forma:

Pgina 110 de 118

Cookies
Cookies so pequenos arquivos de texto armazenados no computador
cliente. O cookie sempre enviado para o servidor quando uma
requisio feita, e pode conter informaes importantes para o
funcionamento de uma pgina, por exemplo o nome de usurio do
visitante e suas preferncias.
Para criar um cookie basta serem informados o nome, valor e data de
expirao. Todo cookie deve conter uma data de expirao para que
possa ser eliminado. Devemos lembrar que um cookie pode ser
eliminado antes da data de expirao, pois o usurio pode limpar os
cookies do navegador a qualquer momento.
Veremos a seguir o cdigo 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 so atribudos valores para as
propriedades Value e Expires. A propriedade Value guarda o valor do
cookie, no caso acima a data do ultimo acesso do usurio ao site. J
a propriedade Expires guarda a data de expirao 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 requisio.
Veremos no exemplo ao seguir como podemos mostrar ao usurio a
data do ultimo acesso utilizando cookies:
View Index:

Pgina 111 de 118

No exemplo acima gravado um cookie sempre que o usurio venha


a clicar no boto. Em toda requisio verificado se o
cookie ultimo_acesso existe
atravs
da
expresso
Request.Cookies["ultimo_acesso"] != null, caso o cookie exista
seu
valor

resgatado
com
a
instruo
Request.Cookies["ultimo_acesso"].Value.
Em cada visita da pgina acima ser mostrado a data da ltima
visita, desde que o usurio clique no boto para gravar o cookie.
Para deletar um cookie da mquina do cliente basta enviar para o
cliente o cookei que deseja remover com alguma data passada:
Pgina 112 de 118

HttpCookie cookie
=
new HttpCookie("ultimo_acesso");
cookie.Expires
= DateTime.Now.AddDays(-1);
Response.Cookies.Add(cookie);
No cdigo acima o cookie ultimo_acesso ser deletado, pois ele tem
a data de expirao menor que a atual.
Expondo Servios na Internet com ASP.NET WEB API
Grande parte do sucesso de alguns dos maiores sites vem pelo
extremo cuidado com relao usabilidade. Os visitantes esto cada
vez mais exigentes e esperam uma experincia semelhante a que
tinham nos aplicativos desktop, ou seja, querem respostas rpidas e
rica interao. O recurso utilizado para alcanar esse nvel de
usabilidade na WEB chamado de AJAX (Asynchronous Javascript
and XML) que faz uso de requisies assncronas para evitar a
atualizao total da pgina.
Saiba

mais: Introduo

ao

AJAX

http://www.linhadecodigo.com.br/artigo/3585/ajax-basicointroducao.aspx
Para utilizar AJAX em uma pgina precisamos de um servio que
disponibilize os dados serializados em XML ou JSON, para isso
existem vrias tecnologias disponveis na plataforma .NET, entre ela
podemos citar os servios 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 criao de servios
HTTP que podem ser consumidos pelos mais diversos tipos de
clientes, como navegadores e aplicativos mveis.
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 servios e no pginas WEB, como mostrado
abaixo:

Pgina 113 de 118

A figura mostra o lugar do ASP.NET WEB API dentre as vrias


tecnologias disponveis 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 so
derivados de uma classe base chamada de ApiController.
Segue abaixo um exemplo da estrutura de um controle no WEB API:

Pgina 114 de 118

Saiba mais: Status HTTP atravs da enumerao HttpStatusCode:


http://msdn.microsoft.com/en-us/library/system.net.httpstatuscode
%28v=vs.80%29.aspx
O cdigo acima cria um controle com um mtodo chamado
GetCliente que recebe um parmetro. Se o valor recebido for 1 ser
retornado o cliente Joo, caso contrrio ser enviado para o cliente
um status 404 (Pgina no encontrada).
Mas qual o padro de acesso?
Para entender vamos verificar a rota adicionada ao projeto no
momento de sua criao:

Um detalhe interessante que o nome do mtodo no precisa ser


especificado na URL, isso porque o WEB API seleciona o mtodo
apropriado tomando como parmetro o verbo HTTP (GET, POST, PUT,
DELETE) que foi utilizado para efetuar a requisio.
Saiba

mais: REST

verbos

HTTP

http://msdn.microsoft.com/pt-br/magazine/dd315413.aspx
A seguinte conveno deve ser utilizada para que um mtodo consiga
ser invocado:
Nome do Mtodo: verbo HTTP + Descrio
Exemplo: GETCliente(), POSTCliente()

Invocando o servio Com Ajax

Pgina 115 de 118

Vamos chamar o cliente

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

HTML:

JAVASCRIPT:

Pgina 116 de 118

Saiba

mais: jQuery

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

FRUM:
Cite cenrios adequados para a utilizao de Cookies e Sesso 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 requisies. Tambm foram
apresentados elementos para trabalhar com persistncia de dados
entre requisies e a tecnologia ASP.NET WEB API, tecnologia que
permite criar e disponibilizar requisies 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.
Disponvel
em:
<
http://dotnetslackers.com/articles/aspnet/KiggBuildingADiggCloneWit
hASPNETMVC1.aspx >. Acesso em: 21 fev. 2013.
WHAT is MVC (modell view controller). 2013. Disponvel em: <
http://www.crcdata.net/technologies/what-is-mvc-model-viewcontroller >. Acesso em: 28 fev. 2013.

SUGESTES DE LEITURA
PALERMO, Jeffrey; Scheirman, Ben; Bogard, Jimmy. ASP.NET MVC
em Ao. So Paulo: Novatec, 2010
LOUREIRO, Henrique. C# 4.0 com Visual Studio 2010. Lisboa:
FCA, 2011
Pgina 117 de 118

MSDN. ASP.NET
MVC
Overview. Disponvel
em:
http://msdn.microsoft.com/enus/library/dd381412%28v=vs.108%29.aspx >. Acesso em:
2012.

<
nov.

MSDN. ASP.NET
MVC
3
Razor.
Disponvel
em:
<
http://msdn.microsoft.com/enus/vs2010trainingcourse_aspnetmvc3razor.aspx >. Acesso em: nov.
2012

Pgina 118 de 118