Sie sind auf Seite 1von 46

ASP.

NET MVC Incio, Meio e Fim Parte 1


H alguns anos a web era um ambiente ldico. O que quero dizer com esta afimao
que o interesse dos usurios ao abrir um website para navegar era: entreter. Era muito
comum ouvir afirmaes do tipo: Internet? Isso coisa de desocupado que no tem o
que fazer!. Evidentemente que, o que faz algo acontecer de fato no mercado a
demanda e, para a demanda daquele momento, as tecnologias disponveis (HTML,
JavaScript e uma linguagem de programao do server-side) eram suficientes. Na poca,
destacavam-se como linguagens server-side: PHP, ASP, CGI, Java (Servlets e Applets) e
outras.
O tempo passou e a internet deixou de ser um ambiente estritamente de entretenimento e
passou a ser um ambiente tambm de negcios. Evidentemente que o perfil do usurio
tambm sofreu alteraes. O usurio que antes acessava um site apenas para ler
notcias, agora acessava um site tambm para consultar preos de produtos, reservar
passagens areas, etc. desnecessrio mencionar que uma nova demanda havia sido
criada e, os sites passaram a ter traos de aplicaes.
Falando especificamente da Microsoft, com esta nova demanda do mercado por
aplicaes web, eis que surge em 2002 o ASP.NET, trazendo consigo o modelo
WebForms de programar. Sim, naquela poca os WebForms causaram um espanto. Com
o desenvolvimento das aplicaes totalmente voltado para a manipulao de
componentes do lado servidor (textbox, gridview, dropdownlist, etc.) e a facilidade de
injeo de comportamentos destes atravs de seus eventos proporcionada pelo Visual
Studio (arrasta o componente, duplo clique no mesmo e insero de cdigo no evento), a
Microsoft arrebanhou uma grande fatia de desenvolvedores, principalmente aqueles j
acostumados com esse modelo (Delphistas e VBistas). Assim, as aplicaes web
tornaram-se corporativistas, fato este que agradou o mercado e resultou em uma grande
adoo da tecnologia.
J para os desenvolvedores web tradicionais, acostumados com o a manipulao direta
dos elementos HTML, JavaScript e linguagens server side, o ASP.NET WebForms
apresentou-se como um ser completamente estranho, principalmente pelo fato de tirar
do desenvolvedor o controle total dos elementos citados acima. Ganhava-se em
produtividade e familiaridade, entretanto, perdia-se em essncia. Na verdade, para estes,
a impresso que os WebForms causavam era: isso no web.
Olhando por este lado e olhando um antigo e funcional modelo de desenvolvimento
(proposto para utilizao com a linguagem Smalltalk), o modelo MVC (Model-ViewController), a Microsoft lanou em 2007 um preview para a comunidade de sua novssima
framework para desenvolvimento de aplicaes web, o ASP.NET MVC. Atualmente o
framework est na verso 2, entrentanto, j temos o preview da verso 3, que segundo
rumores, deve sair ainda em 2010 com algunas novidades interessantes. Mas isso,
assunto para outro artigo.
Conhecendo o ASP.NET MVC
O ASP.NET MVC no um pattern de desenvolvimento mas quase isso. A sigla MVC
vem do ingls Model, View e Controller, que traduzido quer dizer Modelo,
Viso/Visualizao e Controlador. um modelo de programao que possui como
objetivos principais:
Separar as responsabilidades: A idia principal da framework MVC separar as
diferentes responsabilidades do cdigo, ou seja, controladores somente
processam as requisies realizadas pelo browser; modelo responsvel

isoladamente pelo controle de acesso aos dados; vises/visualizaes


responsveis apenas pela exibio das informaes. Cada camada pode trabalhar
de forma isolada da outra (baixo acoplamento), caracterstica extremamente
desejvel no desenvolvimento de sistemas.
Incentiva boas prticas: O modelo MVC tem como uma de suas principais
caractersticas incentivar a utilizao de boas prticas. Um exemplo claro disso a
escrita de testes unitrios. Se voc utilizar o Visual Studio para escrever suas
aplicaes ASP.NET MVC (e isto no requisito para escrever aplicaes ASP.NET
MVC), perceber que no momento da criao de um projeto, a IDE o perguntar se
deseja escrever testes unitrios com ela. Assim, possvel afirmar que a
testabilitade da aplicao resulta no baixo acoplamento.
Exige conhecimentos de (X)HTML, JavaScript e CSS: Quando trabalhamos com
ASP.NET MVC temos as tarefas separadas. Isto interessante principalmente pelo
fato de tornar o cdigo legvel, com boa manutenibilidade e deixar a aplicao
totalmente nas mos do desenvolvedor. Entretanto, essa caracterstica exige um
certo domnio por parte do desenvolvedor.
Fcil manutenibilidade: Como as aplicaes trabalham com diversas
visualizaes para um mesmo controlador, torna-se fcil a tarefa de adicionar ou
remover features (caractersticas) das mesmas, ou seja, fcil dar manuteno em
um cdigo ASP.NET MVC.
Poderamos citar ainda: escalabilidade, utilizao dos helpers na construo das
visualizaes (falaremos deles especificamente em um artigo), visualizaes fortemente
tipadas, facilidade de trabalho com ORMs, dentre outras. A Figura 1 apresenta o modelo
conceitual do ASP.NET MVC.

Figura 1: Arquitetura de uma aplicao MVC (fonte: ASP.NET Nova)


A Figura 1 dispensa maiores comentrios, pois j dizia o dito popular: uma imagem vale
mais que mil palavras, mas apenas para fins de contextualizao, segue uma breve
explicao do modelo.
O componente verde Event representa qualquer requisio realizada pelo usurio, como
por exemplo a ordem para efetuar uma busca no site. A requisio ento obrigatriamente
direcionada para o controlador (em azul). Este por sua vez decide se a requisio
gerar uma nova visualizao (em amarelo) ou se antes de gerar a visualizao de
resposta consultar a fonte de dados (em laranja), por exemplo. Como as visualizaes
pode ser fortemente tipadas, elas tambm podem efetuar consultas ao modelo de dados.
Esta arquitetura extremamente eficaz e funcional s pode ocorrer graas as rotas. A

seguir falaremos de forma mais especfica sobre elas.


Entendendo o mecanismo de rotas
Quando vamos realizar uma viagem, uma prtica muito comum e recomendvel traar a
rota da mesma. Isso nos ajuda a saber o caminho exato que deveremos seguir para que
no nos percamos. Como voc j pode estar imaginando, o ASP.NET MVC trabalha com
a viagem dos dados e, por consequncia, fundamental entender que a rota que estes
dados devero seguir para alcanar seu objetivo final deve estar definida desde o incio
da viagem.
Na arquitetura de WebForms, temos uma url (geralmente subdividida em pastas no
servidor) que, no final das contas, aponta para um arquivo fsico no servidor (.aspx) sendo
que neste, esto implementadas todas as aes solicitadas pelo browser. No ASP.NET
MVC o modelo um pouco diferente, haja vista que a requisio tratada por um
elemento controlador e este decide como gerar a visualizao, portanto, ao invs de
apontarmos para uma pgina (fsica) apontamos para uma ao dentro de um elemento
conceitual, o controlador. Assim, precisamos realmente de uma rota para definir o
caminho final dos dados.
O framework ASP.MVC traz como sugesto uma rota pr-definida, conforme apresenta a
Listagem 1. Entretanto, o desenvolvedor possui o poder de customizar inclusive a rota
do aplicativo. Evidentemente que, para maioria dos casos, a rota proposta pela framework
atende as necessidades, entrentanto importante frisar: no modelo MVC o desenvolvedor
que manda e no a framework.
routes.MapRoute(
"Default", // Nome da rota
"{controller}/{action}/{id}", // Parmetros da URL
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parmetros
da URL
);
Listagem 1: Definio da rota de uma aplicao ASP.NET MVC
A definio de rotas da aplicao ASP.NET MVC se encontra no arquivo Global.asax.
Como possvel perceber alm da rota, preciso especificar valores padro para cada
elemento da rota. Isso realizado na linha 4.
Para que possamos entender e explicar o cdigo da linha 3, imaginemos o exemplo de
controle de Clientes. Portanto, em nossa aplicao ASP.NET MVC, possivelmente
teramos um controlador (para que voc possa visualizar, algo equivalente a uma classe)
chamado Cliente. Imaginemos agora, que quisssemos efetuar uma operao
especfica para clientes, como por exemplo atualizar (editar) as informaes cadastrais do
cliente. Assim, teramos dentro do controlador Cliente uma ao (um mtodo) Editar e,
esta ao precisaria de algum parmetro que indicasse a ela qual cliente deve ter suas
informaes atualizadas. Assim, poderamos parametrizar esta ao atravs do cdigo do
cliente, por exemplo. Assim, poderamos ter (como exemplo) a url apresentada abaixo
para a chamada deste processo:
http://seusite.com.br/Clientes/Atualizar/1854
Na comparao com o modelo tradicional WebForms, o que se entenderia olhando a url
acima que Clientes seria um diretrio, Atualizar seria outro diretrio e a parte final, o
nmero 1854 seria uma pgina fsica no servidor. J com ASP.NET MVC Clientes seria
o controlador (controller), Atualizar seria a ao (action) a ser executada pelo controlador

e o nmero 1854 seria o parmetro a ser enviado para a ao.


Na linha 4, vale salientar que o parmetro id opcional, portanto, possvel termos uma
url com a ausncia deste valor. Algo como: http://seusite.com.br/Clientes/Cadastrar. Alm
disso, como todo controlador tem uma ao padro (por default a ao Index), tambm
comum encontrarmos urls do tipo: http://seusite.com.br/Clientes. Neste caso, ao chamar
o controlador Clientes e no passar o nome da ao na url, a framework
automaticamente direciona a requisio para a ao padro.
Bom pessoal, este o primeiro artigo de uma srie abordando todos os principais
conceitos relacionados ao ASP.NET MVC. Neste primeiro artigo, a idia : posicion-lo em
relao a tecnologia, para saber em que tipo de terreno est pisando. Nos artigos
seguintes, trataremos de aspectos tcnicos e, artigo a artigo, vamos mergulhando cada
vez mais no universo das aplicaes ASP.NET MVC.
No prximo artigo criaremos nossa primeira aplicao ASP.NET MVC e entenderemos
como tudo funciona l dentro. Voc no deve perder. A idia que, ao final de cada artigo,
um vdeo esteja disponvel apresentando os conceitos aborados no artigo. aprender ou
aprender. Como este primeiro artigo conceitual, no temos o vdeo. Mas a partir do
prximo, voc no deve perder!
Se voc gostou ou no da leitura, deixe seu comentrio. a nica forma que temos para
evoluir com os contedos e escrever textos cada vez melhores
. Obrigado e at a
prxima!

ASP.NET MVC Incio, Meio e Fim Parte 2


No primeiro artigo da srie ASP.NET MVC Incio, Meio e Fim, nossa preocupao
principal foi responder a uma pergunta intrigante: O que ASP.NET MVC?. Nele,
apresentamos as linhas gerais que delineiam a tecnologia, bem como alguns aspectos
tcnicos envolvidos. Falamos um pouco sobre o modelo de desenvolvimento Model-ViewController e como estas camadas interagem entre s e entendemos o mecanismo de
rotas, um dos pilares deste modelo de desenvolvimento. Portanto, caso no tenha
efetuado a leitura do primeiro artigo e no no possua os conhecimentos equivalentes,
recomendo forte a leitura do mesmo, que pode ser realizada gratuitamente na ntegra
seguindo o link: http://fabriciosanchez.com.br/2/?p=987.
No artigo de hoje, falaremos um pouco das verses do ASP.NET MVC e a evoluo
ocorrida de uma verso para outra. Alm disso, passaremos pela instalao do framework
para quem utiliza o Visual Studio 2008 e, finalmente, criaremos e entenderemos a
estrutura de nossa primeira aplicao ASP.NET MVC.
Verses do ASP.NET MVC
A primeira verso do framework ASP.NET MVC foi lanada em 2007. De l para c,
webdevelopers que no conseguiam aceitar o modelo de programao para web proposto
pelos WebForms comearam a estudar e adotar o modelo MVC em seus projetos. Os
nmeros chegaram a casa de 1 milho de downloads para a verso 1. Posteriormente,
em meados de 2009 a Microsoft lana a verso 2.0 da framework MVC. O salto de
recursos em relao as features da verso 1 foram significativos. Dentre eles podemos
citar:
Helpers fortemente tipados (falaremos especificamente sobre Helpers em um artigo
futuro);
Melhorias em relao a validao de modelos (tanto para server-side quanto para
client-side);

Suporte para a diviso/particionamento de grandes aplicaes em reas;


Auto-Scaffold para Helpers e customizao de templates (falaremos
especificamente sobre scaffolds em um artigo futuro);
Simplificao de muitas terminologias, resultando em cdigos mais limpos e
legveis;
Dentre outras;
A verso 2.0 a verso final, estvel e que j vem acoplada ao Visual Studio 2010.
H alguns meses a Microsoft liberou o preview da verso 3 do ASP.NET MVC para a
comunidade tcnica. Assim que foi lanado os webdevelopers congestionaram o site da
Microsoft baixando a nova verso. Muitas novidades esto por vir, mas, eu destacaria a
nova view engine padro, cujo codinome Razor, suporte para HTML 5 e o NuPack. No
se preocupe, falaremos de todos esses conceitos especificamente em artigos futuros.
Existem rumores que a verso final do ASP.NET MVC 3 deve ser lanada at o final de
2010. Enquanto a verso 3 no vem, vamos aprender na verso 2, que era a verso final,
estvel, quando este artigo foi escrito.
Instalando o ASP.NET MVC 2 no Visual Studio 2008
A verso 2 do framework ASP.NET MVC pode ser utilizada tanto com o Visual Studio 2008
quanto com o Visual Studio 2010. O fato que confunde alguns desenvolvedores que esto
iniciando com a tecnologia , se voc utiliza o Visual Studio 2010, j possui o framework
MVC 2 instalado e pronto para utilizao. Caso voc utilize o Visual Studio 2008, o
framework no vem instalado nativamente, portanto, esta instalao deve ser feita
manualmente. A seguir descrevo este processo.
1. O primeiro passo para instalar o framework efetuar o download do mesmo. Para
isso, basta seguir o link: http://www.microsoft.com/downloads/en/details.aspx?
FamilyID=3b537c55-0948-4e6a-bf8c-aa1a78878da0&displaylang=en.
2. A instalao do ASP.NET MVC 2 exige que o Visual Studio 2008 esteja com o
Service Pack 1 instalado. Se ao tentar executar o instalador mencionado no tem 1
voc no obtiver sucesso, provvel que voc necessite instalar o SP1 do Visual
Studio. Se este for seu caso, basta seguir o link
http://www.microsoft.com/downloads/en/details.aspx?FamilyId=FBEE1648-710644A7-9649-6D9F6D58056E&displaylang=en, baixar, instalar e, em seguida,
executar novamente o executvel apresentado no tem 1.
A instalao do framework MVC no possui qualquer segredo. Ao contrrio,
extremamente simples, bastante seguir os protocolos tradicionais de instalao de
aplicativos (aceitar os termos de licena, diretrio de instalao, etc.). Se tudo correu
bem, ao abrir o Visual Studio 2008 e criar um novo projeto web, voc poder visualizar
uma nova opo de aplicao, conforme apresenta a Figura 1.

Figura 1: Escolhendo a opo de projeto (imagem retirada do blog de Fernanda Sallai)


No final deste artigo voc encontrar uma vdeo aula que apresenta o processo de
instalao da framework do ASP.NET MVC 2 para Visual Studio 2008.
Criando e entendendo nosso primeiro aplicativo ASP.NET MVC 2
Aps contextualizar o momento pelo qual est passando o framework ASP.NET MVC e
apresentarmos o processo de instalao do mesmo para usurios do Visual Studio 2008,
chegado o momento de criarmos nossa primeira aplicao ASP.NET MVC.
No artigo de hoje, o que faremos criar nossa aplicao ASP.NET MVC e esmiu-la,
entendendo a arquitetura de uma aplicao ASP.NET MVC. Para isso, utilizaremos um
modelo pronto, fornecido pelo Visual Studio. Este modelo, muito embora simples, nos
dar a dimenso exata da arquitetura de uma aplicao MVC. Aproveitaremos este
mesmo exemplo para apresentar em artigos futuros, todos os demais conceitos
importantes, tais como: helpers, ASP.NET Razor, Validaes, etc. Ao final deste artigo,
voc encontrar uma pequena vdeo aula apresentando os conceitos vistos neste artigo.
Criando o projeto
Com o Visual Studio devidamente aberto e configurado, vamos criar um novo projeto do
tipo Web > ASP.NET MVC 2 Web Application e nome-lo para SitePessoal. A Figura
2 apresenta este processo.

Figura 2: Selecionando o projeto ASP.NET MVC


Quando clicar em OK a tela apresentada pela Figura 3 aparecer. Conforme
mencionamos no primeiro artigo da srie, uma das vantagens do modelo ASP.NET MVC
o fato de que este incentiva a escrita de testes unitrios. A tela apresentada pela Figura 2
pergunta ao desenvolvedor se ele deseja utilizar o Visual Studio Unit Test (framework de
testes embutida no Visual Studio) para escrever testes unitrios para a aplicao. Se voc
selecionar Yes, create a unit test project e pressionar o boto OK, um projeto
especfico para testes ser adicionado a Solution Explorer e voc poder utilizar a
framework de testes do Visual Studio. Se selecionar a opo No, do not create a unit test
project e pressionar o boto OK, o que estar fazendo dispensar a utilizao dos
testes unitrios do Visual Studio. perfeitamente possvel adicionar um projeto de testes
a qualquer momento da vida do projeto, por isso, vamos marcar a segunda opo
(dispensar temporariamente os testes) e clicar em OK. Falaremos de testes em nossas
aplicaes ASP.NET MVC em um futuro prximo!

Figura 3: Selecionando a presena/ausncia de testes unitrios

Se tudo correu conforme o esperado, seu projeto foi criado. Conforme mencionado
anteriormente, o que fizemos foi utilizar uma estrutura de aplicao j pronta e fornecida
pelo Visual Studio, portanto, ao compilar e executar o projeto, voc dever visualizar algo
semelhante ao apresentado pela Figura 4.

Figura 4: Aplicao em execuo


Como voc pde constatar nossa aplicao de demonstrao est funcionando
corretamete. Se voc navegou atravs dela, percebeu que ela j vem munida de duas
sees Home e About, alm de incorporar um controle de usurios via Membership
Helper. No decorrer de nossos exemplos, vamos incrementar e modificar features
(caractersticas) de nossa aplicao. Mas isto assunto para o prximo artigo.
Conhecendo e entendendo a estrutura da aplicao
Para que possamos comear a entender a essncia de uma aplicao ASP.NET MVC,
iniciemos nossas anlises pela Solution Explorer de nosso projeto. Conforme apresenta a
Figura 5, temos os seguintes elementos constituindo a base de nossa aplicao:
Pastas/Diretrios
Properties
References
App_Data
Content
Controllers
Models
Scripts
Views
Arquivos
Global.asax
Web.config
Iniciemos pelos diretrios. Properties, References e App_Data j so velhas conhecidas
dos projetos ASP.NET WebForms. Vou ento focar a explicao naquilo que novo, os
diretrios Content, Controllers, Models, Scripts e Views. Os diretrios Content e Scripts
so diretrios de apoio de nossa aplicao. So diretrios com nomes sugeridos pelo
Visual Studio para estruturar de forma correta sua aplicao. Estes nomes podem ser
diferentes, de acordo com sua preferncia. A idia que o diretrio Content hospede
arquivos e/ou novos diretrios de arquivos de apoio, tais como: folhas de estilos, imagens
etc. J para o diretrio Scripts, a idia hospedar todos os arquivos de script aos quais a
aplicao necessita. Um exemplo clssico destes tipos de arquivos so scripts JavaScript
(JQuery, por exemplo). Ao maximizar o diretrio Scripts, voc poder perceber que uma
gama de arquivos se encontram presentes no mesmo. Isso se deve ao fato de havermos
criado uma aplicao baseada em um modelo do Visual Studio, portanto, o prprio VS
adicionou as aquivos de script que ele utiliza. Voc pode adicionar seus arquivos de script
a esta pasta sem qualquer tipo de problema.

Figura 5: Solution Explorer inicial do projeto


O grande diferencial de nossa aplicao (e de todas as aplicaes ASP.NET MVC) so
proporcionados pelas trs pastas que ainda no mencionamos na explicao: Models,
Views e Controllers. Na verdade, no so as pastas que oferecem o diferencial e sim, o
que elas representam, a separao das responsabilidades.
Models: este diretrio agrupa os arquivos relacionados ao acesso aos dados.
Sejam classes de acesso utilizando o ADO.NET ou o ORM de sua preferncia, os
arquivos de acesso e manipulao dos dados so agrupados nesta pasta.
Portanto, o nome do diretrio Models (Modelos) vem justamente do fato de os
arquivos do modelo de dados estarem agrupados nele.
Views: em portugus viso ou tambm visualizao, esta pasta agrupa os
arquivos resutantes do processamento das actions, conforme veremos mais
adiante neste artigo. Dentro desta pasta agrupam-se sub diretrios que possuem o
mesmo nome dos controllers (controladores) e, dentro destes, os arquivos com a
extenso ASPX ou CSHTML (para o caso do Razor).
Controllers: este diretrio, como o prprio nome sugere, agrupa os arquivos
controladores (classes). Se voc leu o primeiro artigo da srie, deve estar lembrado
que as requisies feitas no browser no so enviadas diretamente para uma
pgina como no modelo WebForms e sim, para um elemento chamado controller
que, ao receber a requisio seleciona a action correta e executa o processamento.
Finalmente, temos os arquivos Global.asax e Web.config. O Web.config um velho
conhecido dos programadores WebForms. Neste arquivo so setadas configuraes
gerais da aplicao, como: strings de conexo, informaes de helpers, segurana, etc.
J no arquivo Global.asax temos configuraes especficas da framework para a
aplicao, como a configurao das rotas por exemplo.
Entendendo a arquitetura da aplicao
A Figura 6 apresenta a Solution Explorer do projeto com todas as pastas maximizadas.
Vamos utilizar frequentemente esta figura para explicarmos a interao entre os mdulos
da aplicao.

Figura 6: Solution Explorer expandida


Para que entendamos nossa aplicao, vamos utilizar como referncia tambm a imagem
utilizada no primeiro artigo da srie. A Figura 7 a reproduz novamente.

Figura 7: Estrutura conceitual de uma aplicao ASP.NET MVC


Daqui por diante utilizaremos a nomenclatura em ingls para os elementos por ser o
padro utilizado por autores e pela comunidade tcnica.
Como possvel observar na Figura 7, quando um evento ocorre (entenda-se por evento
neste momento a chamada de uma url) o primeiro elemento a ser chamado o controller.
Para comearmos a entender como as rotas (mencionadas no primeiro artigo da srie)
determinam o trfego das informaes pelos mdulos, executemos nossa aplicao. Se

tudo correu bem, voc deve estar visualizando uma url semelhante a esta:
http://localhost:1379/. Como possvel notar, no temos a chamada explcita de
qualquer controller, action e value e mesmo assim nossa aplicao est funcionando
corretamente. Isto somente possvel em funo do cdigo implementado por padro
pela framework no arquivo Global.asax, conforme apresenta a Listagem 1.
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } //
Parameter defaults
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
}
Listagem 1: Definies padro de rotas da aplicao
Note que j esto definidos um controller padro, uma action padro e um value padro e
estes elementos j esto registrados na framework desta forma. Assim, teriamos a
exibio da mesma tela (view) se passssemos as seguintes urls na barra de endereos
do browser: http://localhost:1379/Home ou http://localhost:1379/Home/Index. Neste
caso, Home o controller e Index a action. A Figura 8 apresenta o resultado de
ambas as chamadas.

Figura 8: Realizando requisies com formatos diferentes de url


Para completarmos o raciocnio e entendermos exatamente o que est ocorrendo,
voltemos a Solution Explorer. Olhando para o diretrio Controllers encontramos o
arquivo HomeController.cs. Este arquivo o controlador chamado por default quando
chamamos as urls acima. Dando um duplo clique sobre este arquivo e analisando-o, voc
verificar a existncia de um mtodo, chamado Index. Este mtodo chamado Action e
representa uma das operaes que o controlador capaz de realizar diante de
determinado evento (chamada de url). A Listagem 2 apresenta o cdigo da classe
(controller) HomeController.cs.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace SitePessoalMVC.Controllers
{
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
ViewData["Message"] = "Welcome to ASP.NET MVC!";
return View();
}
public ActionResult About()
{
return View();
}
}
}
Listagem 2: Actions do controller Home
Voc deve estar se perguntando: e as views? Onde entram nesta histria? Note, olhando
para o cdigo apresentado pela Listagem 2 fica fcil notar um aspecto: views no podem
ser resultantes de controllers. O motivo de realizar esta afirmao simples: como
possvel gerar uma nica tela para contedos diferentes? No possvel. Portanto, views
so telas que exibem contedos resultantes do processamento de actions e no de
controllers. Assim, em nosso exemplo, a action Index do controller Home exibe apenas
a mensagem Welcome to ASP.NET MVC.
Alguns aspectos so de fundamental importncia no cdigo da Listagem 2. O primeiro
deles que a action Index retorna um ActionResult, ou seja, a action deve retornar um
objeto especfico que a view reconhea e possibilite transitar valores entre os mdulos
(controllers e views). Neste caso, o que a action Index retorna um objeto ViewData
chamado Message que contm a mensagem Welcome to ASP.NET MVC. Views que
retornam ViewData so muito comuns nas aplicaes ASP.NET MVC, mas no so uma
regra. perfeitamente possvel, por exemplo, construir uma action que retorne uma string
etc. Veremos todos estes casos em nossos exemplos futuros.
Olhando novamente a Solution Explorer, desta vez o diretrio Views, fica fcil
encontrarmos um sub diretrio chamado Home e dentro dele dois arquivos com a
extenso ASPX: Index e About. Evidentemente que o sub diretrio possui o nome do
controller e os arquivos possuem os nomes das actions do mesmo, conforme pode ser
constatado na Listagem 2. Como estamos utilizando o exemplo do controller Home e da
action Index, a Listagem 3 apresenta o cdigo da view Index.
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Home Page

</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2><%: ViewData["Message"] %></h2>
<p>
To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET
MVC Website">http://asp.net/mvc</a>.
</p>
</asp:Content>
Listagem 3: Cdigo da view Index
Como voc pode perceber, o cdigo da view extremamente simples. O aspecto a ser
ressaltado na Listagem 3 a utilizao das tags <% %> para escrevermos os valores
provenientes das actions, como pode ser constatado na linha 8. Aqui, o que estamos
fazendo escrever entre as tags <h2></h2> o ViewData retornado pela action.
Concluso
Aps a leitura deste segundo artigo, o que voc deve ter em mente : requisies so
tratadas pelos controllers atravs de actions, que geram views. A seleo da action
adequada por parte do controller depende diretamente da url invocada pelo usurio
atravs
do
browser,
que
segue
o
seguinte
formato:
http://dominio/controller/action/valor.
Outro aspecto que voc deve ter em mente que, um controller pode ter vrias actions,
tantas quantas necessrias e que, view so resultantes de actions e no de controllers.
Por enquanto, no estamos trabalhando com models, mas em um futuro prximo
trabalharemos e voc entender como realizado o acesso a dados.
Vdeo aula
Para reafirmar os conceitos apresentados neste artigo, recomendo fortemente a
visualizao da primeira vdeo aula da srie: ASP.NET MVC Incio, Meio e Fim Parte
2 Entendendo a estrutura de uma aplicao ASP.NET MVC. Bom aprendizado e no
deixe de enviar seus comentrios, eles so de fundamental importncia para ns.
.

ASP.NET MVC Incio, Meio e Fim Parte 3


No primeiro artigo desta srie, voc foi apresentado ao framework ASP.NET MVC e
entendeu quais so os aspectos gerais que definem a tecnologia. Em seguida, no
segundo artigo, apresentamos um resumo do processo de evoluo da tecnologia e
entendemos como se d a separao das responsabilidades e a comunicao entre os
controllers, models e views. Caso no tenha efetuado a leitura dos dois artigos iniciais e
no possua os conhecimentos equivalentes, recomendo fortemente a leitura antes de
prosseguir com este artigo.
Neste artigo, personalizaremos alguns aspectos da aplicao que criamos no artigo
anterior (modificar algumas mensagens que esto em ingls) e, em seguida, criaremos
nosso primeiro controller, entendendo em detalhes o que este faz e como podemos criar
controllers personalizados. Em seguida, a partir do controller criaremos nossa primeira
view e exibiremos os valores retornados pelo controller. O objetivo que, ao final deste
artigo, voc entenda o que um controller e uma view e torne-se apto a cri-los de forma
personalizada.
Vale lembrar que, ao final deste artigo, estar disponvel uma vdeo aula apresentando os
conceitos visualizados no artigo.

Personalizando a aplicao
A aplicao que personalizaremos aqui aquela criada no segundo artigo da srie,
portanto, fundamental a leitura do segundo artigo para que possa prosseguir com os
exemplos apresentados a seguir.
Como mencionado tambm no artigo anterior, estamos utilizando para a construo de
nossos exemplos, um modelo de aplicao MVC j pronto, disponibilizado pelo Visual
Studio 2010. Este modelo j traz a estrutura de diretrios e arquivos base bem definida,
portanto, alguns aspectos devem ser personalizados, principalmente sob o aspecto
textual, para nos familiarizarmos com a aplicao. A seguir, apresento as pginas e
respectivas customizaes.
As personalizaes realizadas sero as seguintes:
Na guia Solution Explorer, expanda a aba no diretrio Views e, em seguida, expanda o
diretrio Shared. D um duplo clique sobre a pgina Site.Master. Nesta pgina,
atualizaremos:
1. A informao contida entre as tags h1;
2. Persolizaremos os tens de menu;
Como voc pde perceber, nossa aplicao utiliza o conceito de Master Pages, portanto,
as alteraes realizadas em Site.Master sero refletidas em todas as pginas que
herdam suas caractersticas. Caso este conceito seja novo para voc (conceito de Master
Pages), voc pode efetuar a leitura do artigo que escrevi aqui no site sobre o assunto. A
Listagem 1 apresenta o cdigo do trecho da pgina Site.Master antes da personalizao
e a Listagem 2 apresenta o cdigo depois da personalizao.
<div id="header">
<div id="title">
<h1>My MVC Application</h1>
</div>
<div id="logindisplay">
<% Html.RenderPartial("LogOnUserControl"); %>
</div>
<div id="menucontainer">
<ul id="menu">
<li><%: Html.ActionLink("Home", "Index", "Home")%></li>
<li><%: Html.ActionLink("About", "About", "Home")%></li>
</ul>
</div>
</div>
Listagem 1: Trecho de cdigo a ser personalizado
<div id="header">
<div id="title">
<h1>FabricioSanchez!</h1>
</div>
<div id="logindisplay">
<% Html.RenderPartial("LogOnUserControl"); %>

</div>
<div id="menucontainer">
<ul id="menu">
<li><%: Html.ActionLink("Home", "Index", "Home")%></li>
<li><%: Html.ActionLink("Usurios", "Index", "Usuarios")%></li>
<li><%: Html.ActionLink("Notcias", "Index", "Noticias")%></li>
</ul>
</div>
</div>
Listagem 2: Trecho de cdigo personalizado
Em relao aos cdigos apresentados pelas Listagens 1 e 2, os aspectos a serem
observados so:
Listagem 2 linha 3: O contedo foi modificado, de My MVC Application para
FabricioSanchez!;
Listagem 2 linhas 13-15: Alterados os tens de menu. Duas novas opes foram
adicionadas as tags <li>, Usurios e Notcias.
Uma observao importante sobre a criao dos novos tens de menu a ausncia das
tags <a></a> para vinculao dos links. Estas tags encontram-se ausentes em funo
da utilizao do helper Html. Falaremos especificamente dos helpers em um artigo
futuro desta srie, mas apenas para fins de contextualizao, o que um helper faz
encapsular uma operao especifica para simplificar o processo de escrita da view.
Assim, o helper Html atravs da funo ActionLink redireciona a requisio para o
controller e action respectiva. A Figura 1 apresenta a aplicao em execuo aps as
alteraes realizadas.

Figura 1: Aplicao ASP.NET MVC em execuo


Cada um dos novos tens de menu, representam o set de operaes que construiremos
neste e nos artigos posteriores. Neste artigo, construiremos exemplos de controllers e
views para Usurios.
Criando nosso primeiro Controller
Conforme mencionado anteriormente, cada um dos tens de menu representar um set de
operaes. Por exemplo, o tem de menu Usurios representa o set de operaes
possveis para usurios (cadastrar usurio, editar usurio, remover usurio, listar usurio

e demais operaes relacionadas a usurios), assim, criaremos um novo controller


chamado Usuarios, da vem a parametrizao do helper Html apresentado na Listagem
2, conforme apresenta o trecho de cdigo da Listagem 3.
<%: Html.ActionLink("Usurios","Usuarios","Home")%>
Listagem 3: Parametrizao do mtodo ActionLink do helper Html
O trecho de cdigo apresentado pela Listagem 3 apresenta trs parmetros para o
mtodo ActionLink. So eles: Usurios, Usuarios e Home. Como possvel observar,
neste caso, os trs parmetros so do tipo string. importante observar que existem 10
sobrecargas para este mtodo, ou seja, a forma como a funo ActionLink est
parametrizada na Listagem 3, muito embora seja a comumente encontrada, no a
nica.
Vamos ento a criao do controller. Para isso, com seu projeto aberto, v at a Solution
Explorer, clique com o boto direito sobre a pasta Controllers, Add, Controller,
conforme ilusta a Figura 2. Ao executar este procedimento, uma nova janela ser
apresentada para que voc ento nomeie o controller. O nome dever ficar
UsuariosController e voc dever marcar a opo Add control methods for Create,
Update, Delete and Details scenarios. Uma observao importante que a framework
MVC utiliza a poro Controller do nome informado para gerenciar os controllers,
portanto, voc no deve alterar esta poro, deve ater-se apenas aquela previamente
selecionada.

Figura 2: Adicionando um novo controller Usuarios


Ao marcar a opo Add control methods for Create, Update, Delete and Details
scenarios, o que voc est dizendo a framework que ela dever criar um controller com
4 actions bsicas: Create, Edit, Delete e Details. Lembrando, actions so as aes para
as quais o controller redirecionar a requisio. Se tudo correu bem, uma nova classe
deve ter sido criada com o cdigo semelhante ao apresentado pela Listagem 4.
namespace SitePessoalMVC.Controllers
{
public class UsuariosController : Controller
{
//
// GET: /Usuarios/
public ActionResult Index()
{
return View();
}

//
// GET: /Usuarios/Details/5
public ActionResult Details(int id)
{
return View();
}
//
// GET: /Usuarios/Create
public ActionResult Create()
{
return View();
}
//
// POST: /Usuarios/Create
[HttpPost]
public ActionResult Create(FormCollection collection)
{
try
{
// TODO: Add insert logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
//
// GET: /Usuarios/Edit/5
public ActionResult Edit(int id)
{
return View();
}
//
// POST: /Usuarios/Edit/5
[HttpPost]
public ActionResult Edit(int id, FormCollection collection)
{
try
{
// TODO: Add update logic here

return RedirectToAction("Index");
}
catch
{
return View();
}
}
//
// GET: /Usuarios/Delete/5
public ActionResult Delete(int id)
{
return View();
}
//
// POST: /Usuarios/Delete/5
[HttpPost]
public ActionResult Delete(int id, FormCollection collection)
{
try
{
// TODO: Add delete logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
}
}
Listagem 4: ControllerUsuarios e suas actions
Muito bem, o que fizemos aqui foi adicionar um novo controller a nossa aplicao
ASP.NET MVC. Este controller foi nomeado como Usuarios e possui (de incio) 8
actions. So elas:
Index(): Action executada por padro quando o controller chamado. Neste artigo,
iremos realizar operaes apenas nesta action. Nos artigos futuros
implementaremos as demais actions.
Details(): Esta action ser executada quando uma operao de details for solicitada
atravs da view. Evidentemente que a lgica de exibio da action deve ser
implementada pelo desenvolvedor. O que a framework faz apenas criar a
estrutura para que o programador personalize.
Create() e [HttpPost] Create(): Note que existem duas actions Create. A primeira
no possui o atributo [HttpPost], portanto, esta a responsvel por exibir o
formulrio de cadastro dos dados do usurio. Sua funo unicamente gerar a
view de cadastro para o usurio. J a segunda, acompanha o atributo [HttpPost],
portanto, se a primeira exibe a tela de cadastro de usurio, a segunda envia os

dados fornecidos para a fonte de dados.


Edit() e [HttpPost] Edit(): Os conceitos apresentados para Create() so vlidos da
mesma forma para Edit(), com a diferena de que Create adiciona um novo usurio
e Edit() atualiza os dados de um usurio prviamente cadastrado.
Delete() e [HttpPost] Delete(): Idem aos dois tens anteriores.
Como neste artigo utilizaremos apenas a action Index(), nos ateremos a ela. Nos artigos
posteriores, vamos focar as demais actions e, portanto, entraremos em maiores detalhes
sobre os parmetros recebidos por elas, etc.
Listando opes de administrao para Usurios
Como na primeira parte deste artigo personalizamos nossa aplicao e adicionamos duas
novas opes de menu (Usurios e Notcias), precisamos, em primeira instncia, exibir as
informaes disponveis para aquela opo. Por exemplo, ao usurio clicar em Usurios,
o que faremos exibir as informaes disponveis para o gerenciamento de usurios. Ok?
V at a action Index() e adicione o trecho de cdigo apresentado pela Listagem 5.
public ActionResult Index()
{
Dictionary<string, string> lista = new Dictionary<string, string>();
lista.Add("Adicionar usurio", "Create");
lista.Add("Editar dados de usurio", "Edit");
lista.Add("Remover usurio", "Delete");
lista.Add("Listar usurios", "List");
ViewData["OpcoesUsuarios"] = lista;
return View();
}
Listagem 5: Action que exibe opes de gerenciamento de usurios
O cdigo acima extremamente simples. Basicamente o que fazemos criar um
dicionrio de dados (este dicionrio contm as opes de gerenciamento de usurios com
suas respectivas actions) e passar este dicionrio via ViewData para a view Index.
Agora, vamos criar a view que exibir as opes de gerenciamento de usurios com seus
respectivos links. Para isso, v at a action apresentada na Listagem 5 e d um clique
com o boto direito sobre o nome da action. Em seguida, selecione a opo Add view.
A janela que se abre uma janela de apoio para construo de views. Neste momento,
apenas clique em Add. Em artigos futuros veremos como utilizar esta janela. A Figura 3
apresenta a janela de configurao das views.

Figura 3: Janela de configurao da view


Para que possamos entender como a framework MVC trata a interatividade entre os
mdulos, observe a Solution Explorer de seu projeto. Quando maximizada, a pasta Views
apresenta uma nova pasta com um novo arquivo ASPX em seu interior, Index.aspx,
conforme apresenta a Figura 4. Note que este arquivo (esta view) possui o mesmo nome
da action, portanto, quando a action retornar valor, este ser exibido na view com o nome
respectivo.

Figura 4: View criada a partir da action


A seguir, adicione o cdigo apresentado pela Listagem 6 na view recm criada.
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Gerenciamento de Usurios
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Gerenciamento de Usurios</h2>
<ul>
<% foreach(KeyValuePair<string, string> dados in (Dictionary<string,
string>)ViewData["OpcoesUsuarios"]) { %>
<li>
<%: Html.ActionLink(dados.Key.ToString(), dados.Value.ToString(), "Usuarios") %>
</li>
<% } %>
</ul>
</asp:Content>
Listagem 6: Exibindo os dados retornados pela action

O cdigo da Listagem 6 simples. Basicamente percorremos o dicionrio de dados


armazenado em ViewData com foreach e exibimos as informaes em forma de lista com
a ajuda do helper Html. A Figura 4 apresenta o resultado da execuo da view.

Figura 4: Aplicao em execuo


Bom pessoal, por hora isso. Espero que este artigo o tenha ajudado a entender como
podemos criar controllers e trafegar informaes entre os mdulos da aplicao.
No prximo artigo, conectaremos nossa aplicao a um banco de dados e faremos as
opes de Create, Edit, Delete e List. Fique ligado! At l!
No esquea de deixar seu feedback em relao a este artigo na forma de comentrios.
Esta ao simples que no demora nem um minuto de fundamental importncia para
que possamos saber como est o texto.
Abaixo voc pode conferir a vdeo aula complementar ao artigo apresentado
anteriormente. Espero que esta possa o ajudar a consolidar os conceitos j apresentados.
[mediaplayer
src='http://www.fabriciosanchez.com.br/site/wpcontent/uploads/2010/12/Final_Site.wmv' ]

ASP.NET MVC Incio, Meio e Fim Parte 4


Este o quarto artigo da srie ASP.NET MVC Incio, Meio e Fim e, at chegarmos aqui
muitos conceitos relacionados a este modelo de desenvolvimento e a framework ASP.NET
foram abordados. Antes de prosseguirmos com o contedo do artigo de hoje,
recapitulemos alguns destes:
O que ASP.NET MVC: no primeiro artigo da srie vimos de forma detalhada o
que o ASP.NET MVC e entendemos que este se trata de uma framework
disponibilizada pela Microsoft para construo de aplicaes web sob o padro
MVC de desenvolvimento.
URL Routing: ainda no primeiro artigo, apresentamos o mecanismo de rotas e
entendemos como so efetuadas as chamadas e a interao entre as camadas de
uma aplicao MVC.
Estrutura hierrquica: j no segundo artigo da srie, ao criarmos nossa primeira
aplicao ASP.NET MVC, entendemos como se d de forma prtica a construo
de uma aplicao MVC. Conhecemos as pastas Models, Views e Controllers e
entendemos quais os tipos arquivos hospedados por cada uma delas.
Models, Views, Controllers e Actions: evoluindo nos conceitos, no terceiro artigo
criamos nosso primeiro controller, nossa primeira action e nossa primeira view.
Estes so os principais conceitos apresentados nos trs primeiros artigos da srie.
Evidentemente que detalhes (e so muitos) so contemplados nos artigos. Alm disso, ao
final de cada artigo da srie so disponibilizados vdeos sobre cada assunto, portanto,
caso no tenha lido os trs primeiros artigos e no possua os conhecimentos

equivalentes, recomendo fortemente a leitura de ambos. Os links seguem:


1. ASP.NET MVC Incio, Meio e Fim Parte 1 O que ASP.NET MVC e para que
serve?
2. ASP.NET MVC Incio, Meio e Fim Parte 2 Criando e entendendo a estrtura de
uma aplicao
3. ASP.NET MVC Incio, Meio e Fim Parte 3 Criando e entendendo Controllers,
Actions e Views
Acessando dados com ASP.NET MVC
No artigo anterior, criamos nosso primeiro controller onde, atravs da view Index(),
crivamos um dicionrio de dados (e o preenchiamos de forma manual) e exibiamos as
informaes deste dicionrio na view correspondente. Em aplicaes ASP.NET MVC
perfeitamente possvel criarmos classes e mtodos de acesso a dados de forma
desacoplada, assim, ao invs de adicionarmos elementos aos nossos dicionrios de
forma manual, seria perfeitamente possvel executar esta tarefa de forma automtica,
buscando estas informaes de alguma fonte de dados. No artigo de hoje, realizaremos
as operaes bsicas (inserir, editar, listar e remover registro) com dados em nossa
aplicao ASP.NET MVC.
Um resumo sobre o Entity Framework 4 (EF4)
O Entity Framework um ORM (Object-Relational Mapping) produzido pela Microsoft para
agilizar o processo de acesso e manipulao dos dados das aplicaes. Um ORM realiza
o mapeamento da estrutura do banco de dados relacional e cria, com base neste, o
modelo conceitual (classes, mtodos e atributos e objetos). Assim, o desenvolvedor no
precisa se preocupar com detalhes sobre os dados (forma como o acesso e a
manipulao dos dados ser realizada). Ele precisa preocupar-se apenas em utilizar
corretamente os recursos do ORM. A Figura 1 apresenta uma viso geral sobre o EF4.

Figura 1: Estrutura interna do Entity Framework


Muito embora o Entity Framework traga benefcios considerveis no trabalho com
aplicaes ASP.NET MVC (estes benefcios vem da integrao nativa com a framework)
ele no a nica ferramenta disponvel para realizar acesso a dados com ASP.NET MVC.
Um bom exemplo a ser citado o NHibernate. Voc pode visualizar um bom artigo sobre
a utilizao do ASP.NET MVC com NHibernate no site do desenvolvedor Leandro Prado
ou clicando diretamente aqui.

Para a construo da aplicao exemplo de nosso artigo, utilizaremos o Entity


Framework. Futuramente escreverei um artigo especificamente sobre o EF4 e a sim,
abordaremos todas as caractersticas importantes da ferramenta.
Criando o banco de dados de exemplo da aplicao
Para que possamos realizar as operaes com dados, evidentemente precisamos estar
com o banco de dados disponvel. Portanto, vamos a criao dele. No darei muitos
detalhes sobre o processo de criao do banco e das tabelas, pois este, no o escopo
deste artigo. A Figura 2 apresenta o DER (Diagrama Entidade Relacionamento) de nossa
base de dados.

Figura 2: DER da aplicao exemplo


Em seguida, implementamos o modelo apresentado pela Figura 2 no SQL Server, como
pode ser visualizado na Figura 3.

Figura 3: Banco criado atravs do SQL Server Management Studio


O que faremos a seguir implementar as operaes bsicas de CRUD para nossa
aplicao, isto , para usurios, criaremos rotinas de insero, edio, remoo e
listagem. Mos a obra?
Criando o modelo de dados
Com o projet0 SitePessoalMVC aberto, o que faremos primeiro criar um contexto de
dados para nossa aplicao, ou seja, iremos conectar nossa aplicao a base de dados
criada anteriormente utilizando o Entity Framework 4. Conforme mencionado nos artigos
anteriores, a camada do modelo MVC responsvel pelos dados Model, portanto, para
criarmos o acesso aos dados, iremos adicionar um modelo de dados ao diretrio Model
de nossa aplicao.
Ao clicar com o boto direito do mouse sobre a pasta Model na Solution Explorer e

selecionar a opo Add new item uma janela de opes ser exibida. A esquerda
selecione a guia Data e, a direita, selecione a opo ADO.NET Entity Data Model.
Nomeie este arquivo conforme a convenincia. Sugestivamente nomeamos como
ModeloSitePessoalMVC.edmx. A Figura 4 ilustra este procedimento.

Figura 4: Criando o modelo de dados da aplicao


Ao clicar em Add uma nova janela ser apresentada. Neste momento, configuraremos
nosso modelo de dados, ou seja, informaremos ao Entity Framework tudo o que ele
precisa saber para que o mapeamento seja realizado de forma correta. Nesta janela duas
opes so apresentadas. A primeira Generate from database e a segunda Empty
model. Na primeira opo o EF4 utilizar uma base j existente como referncia para a
modelagem. Na segunda opo, atravs do EF4 iremos criar um novo modelo conceitual
(classes, atributos e mtodos) e, atravs dele gerar o modelo fsico relacional de dados.
Como j possumos nossa base de dados devidamente criada e configurada, a opo que
nos interessa nesta tela a primeira Generate from database, em seguida, pressione
Next. A Figura 5 apresenta esta escolha.

Figura 5: Criando um modelo com base em base de dados pr-existente


A tela seguinte nos d as opes de conexo com a base de dados. Neste momento,
devemos escolher a qual base de dados o EF4 deve se conectar para criar o modelo
conceitual de dados, se queremos que o EF4 respeite a regra de case-sensitive para a
string de conexo e o nome que atribuiremos a esta conexo. Como nossa base de dados
foi criada recentemente e ainda no nos conectamos a ela, o que faremos clicar sobre o
boto New connection a frente da lista suspensa, assim, estaremos criando uma nova
conexo com o banco de dados. Na tela que se apresenta, voc deve selecionar o
servidor do banco de dados (sua mquina ou um servidor remoto) onde est localizada a
fonte de dados, as informaes de autenticao (Windows authentication ou SQL Server
Authentication) e a base de dados a qual pretende se conectar e clicar em OK. A Figura 6
apresenta este procedimento.

Figura 6: Configurando a nova conexo com a fonte de dados


Se tudo ocorreu conforme o esperado, ao clicar em OK voc dever voltar a tela anterior.
Note agora que, ao expandir a lista suspensa, um novo banco de dados apareceu entre
os j existentes, no meu caso: fabricio-pc.BDExemplosMVC.dbo. Selecione esta nova
base de dados, marque a opo Yes, include the sensitive data in the connection string.
e nomeie a string de conexo como StringConexaoExemplosMVC. A Figura 7 apresenta
esta tela com a configurao final.

Figura 7: Configuraes da conexo


Clicando em Next uma nova janela ser apresentada. Nesta janela possvel escolher
quais aspectos de sua base de dados voc deseja que o EF4 faa o mapeamento. Em
nosso caso, queremos apenas as tabelas, mas perfeitamente possvel trazer views,
stored procedures, etc. Mais abaixo, temos a opo de nomear nosso modelo.
Sugestivamente nomearemos como ModeloDados e clicaremos em Finish. O resultado
desta configurao pode ser visualizado na Figura 8.

Figura 8: Modelo conceitual de dados gerado a partir do modelo fsico


Se voc no conhecia o poder do Entity Framework 4 agora j conhece. O que fizemos
aqui foi, com base em um banco de dados fsico (tabelas, colunas e relacionamentos),
criar um modelo de dados lgico (classes, mtodos e atributos), assim, todas as
manipulaes de dados so realizadas a nvel de classes e mtodos, ficando a cargo do

ORM a forma como estas manipulaes se daro no banco de dados. Note que todas as
caractersticas do banco de dados foram mantidas no modelo conceitual: relacionamento,
chaves primrias, tipos de dados, etc.
Inserindo novos usurios
Com nosso modelo de dados j pronto, podemos ento codificar nossas actions para que
elas insiram, editem, removam e listem usurios. A primeira destas tarefas consiste na
insero de novos usurios, assim, d um duplo clique sobre o controller
UsuariosController (criado no terceiro artigo desta srie). Procure a action Create. Note
que existem duas actions Create. Uma delas possui o atributo [HttpPost]. Basicamente,
a action que possui o o atributo em seu cabealho aquela invocada no moment0 em que
solicitamos o postback com os dados fornecidos pelo usurio no formulrio de cadastro. A
action que no possui este atributo, aquela invocada por default pela framework MVC
atravs do URL routing: http://seu-endereco/Usuarios/Create. Primeiramente iremos criar
o formulrio para o cadastro dos dados de usurio, portanto, v at a action Create (sem
HttpPost) e em seu interior adicione o cdigo apresentado pela Listagem 1.
public ActionResult Create()
{
return View(new tbUsuarios());
}
Listagem 1: Retornando os dados da classe tbUsuarios para view
Como possvel notar, o cdigo apresentado pela action Create extramente simples. A
nica responsabilidade desta action retornar os dados constantes da classe
tbUsuarios, assim, quando criarmos nossa view fortemente tipada, a framework saber
como realizar o binding das informaes. Agora que j possumos a codificao de nossa
action, podemos criar nossa view que conter o formulrio. Para isso, clique com o boto
direito do mouse sobre sobre o nome da action (neste caso Create) e selecione a opo
Add view. Na janela que se abre, voc pode parametrizar views. Alguns parmetros
possveis de serem personalizados:
Fortemente ou fracamente acoplada: possvel amarrar a construo da view ao
modelo de dados. Para isso, basta ticar a opo Create a strongly-typed view. No
caso da associao, dizemos que a view fortemente tipada, caso contrrio,
dizemos que a view fracamente acoplada.
View Content: possvel utilizar templates em associao com helpers para
construir views. As operaes bsicas de CRUD possuem modelos prontos que
so disponibilizados pela framework. Ao selecionar um formato de view content o
que estar fazendo na realidade escolhendo um template para construo da
view.
Master Page: possvel criar views que herder padres visuais atravs de Master
Pages. Para isso, basta selecionar a opo Select master page e indicar o
caminho fsico da mesma.
Partial View: possvel ainda criar views parciais, ou seja, views com as extenses
.ascx (semelhantes aos web user controls) do ASP.NET Web Forms. Estas
carregam contedos especficos em regies diferentes de uma mesma view.
A Figura 9 apresenta a configurao final da view Create. Uma observao importante a
ser realizada aqui que, views no necessariamente precisam possuir o mesmo nome
das actions. Muito embora seja uma prtica recomendvel, isto no uma regra.

Figura 9: Configurao da view Create


Conforme ilustra a Figura 9, nossa view ser fortemente tipada e, neste caso, est
amarrada a classe tbUsuarios, utilizar o template de create, herdar o padro visual
da master page localizada e ~/Views/Shared/Site.Master e ser renderizada em
MainContent. Ao clicar em Add uma nova view chamada Create.aspx ser criada,
conforme pode ser constatado em ~/Views/Usuarios. A Listagem 2 apresenta o cdigo
da view a qual nos referimos:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<SitePessoalMVC.Models.tbUsuarios>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Create
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Create</h2>
<% using (Html.BeginForm()) {%>
<%: Html.ValidationSummary(true) %>
<fieldset>
<legend>Fields</legend>
<div class="editor-label">
<%: Html.LabelFor(model => model.IDUsuario) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.IDUsuario) %>
<%: Html.ValidationMessageFor(model => model.IDUsuario) %>
</div>
<div class="editor-label">

<%: Html.LabelFor(model => model.NomeCompleto) %>


</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.NomeCompleto) %>
<%: Html.ValidationMessageFor(model => model.NomeCompleto) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Username) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Username) %>
<%: Html.ValidationMessageFor(model => model.Username) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Password) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Password) %>
<%: Html.ValidationMessageFor(model => model.Password) %>
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
<% } %>
<div>
<%: Html.ActionLink("Back to List", "Index") %>
</div>
</asp:Content>
Listagem 2: Cdigo da view Create.aspx
A Figura 10 apresenta a view em execuo. O principal aspecto a ser ressaltado no
cdigo da Listagem 2 a presena macia do helper Html. Isso se deve ao fato de
estarmos utilizando um template para create. Basicamente o que a framework criou com a
ajuda do helper foi, para cada elemento do meu formulrio um correspondente com bind
automtico (atravs de expresses lambda), assim, ao adicionar os dados no formulrio,
todas as informaes j esto automaticamente linkadas com as propriedades da classe
tbUsuarios.

Figura 10: View com formulrio de cadastro de usurios em execuo


Evidentemente que, como utilizamos um template para gerao do formulrio constante
na view, os nomes dos campos, headers e demais aspectos da mesma apresentam-se
em ingls ou com a semntica no ideal. Todas as personalizaes podem ser realizadas
facilmente, j que o cdigo gerado pela framework para view limpo e semntico. No
terceiro artigo desta srie, apresentamos alguns procedimentos para realizar
personalizaes nas views.
Muito bem, o formulrio est criado e pronto para receber os dados de cadastro,
entretanto, ainda no implementamos cdigo para o envio dos dados para o banco de
dados, ou seja, ainda no implementamos o cadastro de usurio de fato. Para isso,
localize a action Create cujo cabealho decorado com o atributo [HttpPost] e,
substitua o cdigo da action pelo cdigo apresentado pela Listagem 3.
[HttpPost]
public ActionResult Create(tbUsuarios objUsuario)
{
try
{
modelo.AddTotbUsuarios(objUsuario);
modelo.SaveChanges();
return RedirectToAction("Index");
}
catch
{
return View();
}
}
Listagem 3: Realizando post com dados fornecidos
A action apresentada pela Listagem 3 ser invocada no momento em que o boto
Create com os dados do formulrio for pressionado. Voc deve estar se perguntando: e
os Request.QueryString() para cada campo do formulrio? Mas, e a sentena SQL que
faz o Insert no banco? Os aspectos da Listagem 3 responsveis por esta mgica so
apresentados a seguir:
Linha 1: Conforme mencionado anteriormente, o atributo HttpPost informa a
framework que a action deve ser invocada quando houver o postback.
Linha 2: A action recebe como parmetro um objeto de tbUsuarios (este objeto
vir quando o postback for realizado) lembram-se do bind automtico?
Linha 6: Invocamos o mtodo AddTotbUsuarios e passamos como parmetro o

objeto que chegou para a action, simplificando, o EF4 est adicionando cada uma
das propriedades de objUsuario em cada coluna da tabela tbUsuarios. Como?
Isso no problema nosso.
Linha 7: Atualizamos o modelo e a sim, a gravao realizada na base de dados.

importante
salientar
que,
modelo

uma
instncia
da
classe
StringConexaoExemploMVC, ou seja, da classe de contexto que definimos quando
criamos nosso modelo conceitual com o Entity Framework. Esta instanciao, neste caso,
ocorre na primeira linha do controller UsuariosController, como pode ser visto abaixo.
StringConexaoExemploMVC modelo = new StringConexaoExemploMVC();
Como uma classe que herda de ObjectContext ela implementa os mtodos inerentes
a cada uma das entidades do modelo conceitual.
A Figura 11 apresenta o sucesso da insero de um novo usurio.

Figura 11: Cadastro de novo usurio realizado com sucesso


Voc deve estar se perguntando: mas e a validao de formulrios? No tem como ser
realizada? Acalme-se, tem como ser feita sim e de vrias formas. O prximo artigo desta
srie trata especificamente de validao de campos de formulrios. Enquanto no
evolumos para validao de formulrios, prossigamos com o contedo deste artigo e
vejamos como possvel listar usurios cadastrados.
Listando usurios cadastrados
Agora que j possuimos o mecanismo de cadastro de usurios, podemos criar um
mecanismo de listagem de usurios. Listar elementos presentes no banco de dados so
uma tarefa comumente solicitada nos sistemas de forma geral para as mais variadas
tarefas, portanto, vejamos como listar dados no ASP.NET MVC de forma extremamente
simplificada.
Ainda no controller UsuariosController, criaremos uma nova action esta ser chamada
List e seu cdigo pode ser visualizado na Listagem 4.
public ActionResult List()
{
var usuarios = from u in modelo.tbUsuarios
orderby u.NomeCompleto ascending

select u;
return View(usuarios.ToList());
}
Listagem 4: Listando os usurios cadastrados
notria a simplicidade do cdigo apresentado pela Listagem 4. O que fazemos aqui
retornar todos os dados presentes em tbUsuarios com LINQ e armazenar no objeto
usuarios. Em seguida, atravs do mtodo ToList() retornamos uma lista de valores para
a view. Clicando com o boto direito sobre o nome da action e selecionando Add view
obtemos o resultado apresentado na Figura 12. A nica mudana em relao a gerao
da view Create est no tipo de template utilizado para gerao da mesma. Como
estamos listando registros, evidentmente que o template utilizado foi List.

Figura 12: Listando usurios cadastrados


Editando informaes de usurios
J criamos rotinas para adicionar novos usurios ao sistema e listar estes usurios. Faltanos ainda editar informaes de usurios j existentes e remover usurios. Vamos ento
a rotina de atualizao de registros. A lgica deste procedimento rigorosamente a
mesma do procedimento de insero de novos registros, ou seja, temos duas actions para
realizar esta tarefa. Uma responsvel por gerar o formulrio com os dados a serem
atualizados e a outra com a funo de atualizar estes dados de forma efetiva, portanto,
um decorado com o atributo [HttpPost] no cabealho. Ainda no controller
UsuariosController localize a action Edit e, em seu interior adicione o cdigo
apresnetado pela Listagem 5.
public ActionResult Edit(long id)
{
var usuarioSel = from us in modelo.tbUsuarios
where us.IDUsuario == id
select us;
return View(usuarioSel.Single());
}
Listagem 5: Gerando formulrio com dados do usurio selecionado
Sem muitas novidades aqui. Simplesmente o que realizamos foi uma busca com LINQ
selecionando o registro pelo ID do usurio. Este ID enviado pelo prprio helper Html
em associao como template Listm cujo resultado visualizado na Figura 12.
Utilizamos o mtodo Single para retornar apenas o registro retornado pelo LINQ.
Agora, para atualizarmos de fato os dados do usurio selecionado, na action Edit
especfica para o postback, adicione o cdigo apresentado na Listagem 6.
[HttpPost]
public ActionResult Edit(long id, FormCollection collection)
{
try

{
var usuarioSel = from us in modelo.tbUsuarios
where us.IDUsuario == id
select us;
UpdateModel(usuarioSel.SingleOrDefault());
modelo.SaveChanges();
return RedirectToAction("Index");
}
catch
{
return View();
}
}
Listagem 6: Atualizando dados do usurio selecionado
Na Listagem 6, novamente o que fazemos selecionar o usurio e passar seus dados
(atravs de id e de FormCollection) para o mtodo UpdateModel() para que a
atualizao seja realizada de fato na base de dados novamente pelo mtodo
SaveChanges() do modelo. O resultado final da edio dos dados do usurio pode ser
visualizado na Figura 13.

Figura 13: Atualizando dados do usurio


Removendo registros da base de dados
Finalmente, aps criarmos as rotinas de insero, listagem e edio, para completarmos
as quatro operaes bsicas propostas neste artigo, implementaremos a seguir a
remoo de registros da base de dados. Novamente, a lgica rigorosamente a mesma
dos demais procedimentos, ou seja, uma action exibe os dados e outra, com o postback
realizado remove o registro.
Localize a action Delete no controller UsuariosController. Na primeira action, aquela
responsvel pela exibio dos dados em primeira instncia, adicione o cdigo
apresentado pela Listagem 7.
public ActionResult Delete(long id)
{
var usuarioDel = from ud in modelo.tbUsuarios

where ud.IDUsuario == id
select ud;
return View(usuarioDel.SingleOrDefault());
}
Listagem 7: Selecionando o registro para remoo
Sim eu sei, parece que est tudo ficando repetitivo. Mas que a simplicidade do processo
muito grande. Note, novamente, selecionamos o registro a ser removido (atravs de seu
ID via LINQ) assim como fizemos para editar e retornamos os dados para view.
Novamente, ao adicionar a view e selecionarmos o template Delete temos a exibio
conforme apresenta a Figura 14.

Figura 14: Confirmando dados para remoo


Ao clicarmos em Delete a ao invocada ser Delete cujo cabealho est decorado
com HttpPost. O cdigo da responsvel por remover o registro da base de dados
simples e pode ser visualizado na Listagem 8.
[HttpPost]
public ActionResult Delete(long id, FormCollection collection)
{
try
{
var usuarioDel = from ud in modelo.tbUsuarios
where ud.IDUsuario == id
select ud;
modelo.DeleteObject(usuarioDel.SingleOrDefault());
modelo.SaveChanges();
return RedirectToAction("Index");
}
catch
{
return View();
}
}
Listagem 8: Removendo o usurio da base de dados

A novidade no cdigo apresentado pela Listagem 8 o mtodo DeleteObject() que ao


receber os dados da coleo e o ID do usurio remove o registro primeiro do modelo e
depois fisicamente do banco de dados, conforme pode ser visualizado na Figura 15.

Figura 15: Registro removido com sucesso


Concluses
Este artigo tinha como objetivo principal apresentar a principal forma de acesso a dados
com ASP.NET MVC, isto , utilizando o Entity Framework. Muito embora esta deva ser
atualmente a principal abordagem, no a nica. possvel obter os mesmos resultados
utilizando outros ORMs, como o caso do NHibernate, por exemplo.
De qualquer forma, este artigo espera ter cumprido seu objetivo ao apresentar o bsico e
a facilidade para se produzir as operaes bsicas de sistema de pequeno porte.
Evidentemente que o ASP.NET MVC muito mais do que o que foi apresentado aqui.
Este artigo pretende ser o startup para que, ao estudar e aprofundar seus conhecimentos,
voc possa construir aplicaes robustas e funcionais.
Continue acompanhando esta srie, pois, nosso estudo no acaba aqui. No prximo
artigo falaremos um pouco sobre validao de formulrios, via Data Annotations e via
JQuery. Nos artigos futuros, ainda nos esperam: ASP.NET razor, testes com ASP.NET
MVC, helpers, views parciais e muito mais.
Se voc gostou ou no deste artigo, por favor, peo para que deixe seu comentrio. Ele
a nica forma de sabermos se o objetivo est sendo alcanado e como podemos
melhorar os textos e metodologias de escrita para ensinar cada vez melhor.
Um grande abrao a todos e at o prximo!

ASP.NET MVC Incio, Meio e Fim Parte 5


No artigo anterior (o quarto desta srie) vimos de forma superficial, como se d o
processo de acesso e manipulao de dados com ASP.NET MVC utilizando o Entity
Framework 4. Vimos tambm como possvel construir views fortemente tipadas
utilizando helpers como ferramentas de apoio. Muito embora conceitos importantes
tenham sido apresentados neste artigo, um aspecto fundamental de sistemas em geral
no foi levado em considerao: a validao das informaes que entram no sistema.
Note, qual o sentido em se construir uma aplicao que colete informaes mas que no
garanta em maior grau a veracidade destas?
No artigo de hoje veremos uma forma para validao dos dados Data Annotations.
Entenda-se aqui como validao de dados a validao de informaes fornecidas pelo

usurio em um formulrio qualquer de pgina web construdo sob o padro MVC. Para a
construo dos exemplos deste artigo, utilizaremos a mesma aplicao mencionada nos
outros artigos da srie, especialmente os exemplos apresentados no artigo anterior a
este.
Validando dados com Data Annotations
Data Annotations um recurso disponvel na framework de forma nativa a partir da verso
2. Muito embora seja nativa a partir da verso 2 do ASP.NET MVC, possvel trabalhar
com Data Annotations em verses anteriores, bastando para isso, efetuar o download e a
instalao do Data Annotations Model Binder. Se este seu caso, baixe o pacote no
Codeplex clicando aqui.
Mas voc deve estar se perguntando: O que faz este Data Annotations? Basicamente,
esta tcnica consiste na decorao de propriedades de uma classe com alguns atributos
especficos, sendo que estes podem ser parametrizados. Assim, na execuo do
postback, ao controller invocar a action especfica para a operao, os valores para
associados a cada propriedade so confrontados (de acordo com os parmetros
informados para os atributos). Caso satisfaam os parmetros, libera o envio, caso
contrrio, no libera.
Para demonstrar este conceito, iremos utilizar o cadastro de novos usurios,
apresentado no artigo 4 desta srie. Assim, com o Visual Studio aberto, v at a Solution
Explorer do projeto e d um duplo clique sobre o arquivo Create.aspx localizado em
~/Views/Usuarios/. Executando este arquivo, ser fcil notar que o formulrio de
cadastro de novos usurios aceita o cadastro de campos em branco, e-mails invlidos,
etc. Portanto, o que faremos realizar a validao destas informaes antes do envio ao
banco de dados via Data Annotations.
Na pasta Models de seu projeto, clique com o boto direito do mouse e selecione a
opo Add class. Neste arquivo, substitua o cdigo gerado pelo cdigo apresentado
pela Listagem 1.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
namespace SitePessoalMVC.Models
{
[MetadataType(typeof(UsuariosMetadata))]
public partial class tbUsuarios
{
}
[Bind(Exclude="IDUsuario")]
public class UsuariosMetadata
{
[Required(ErrorMessage="Por favor, informe seu nome.")]
public string NomeCompleto { get; set; }
[Required(ErrorMessage="Por favor, informe o username.")]
public string Username { get; set; }

[Required(ErrorMessage="Por favor, informe a senha")]


public string Password { get; set; }
}
}
Listagem 1: Validando propriedades via Data Annotations
Linha a linha, entendamos o que faz o cdigo apresentado pela Listagem 1.
Linhas 5 e 6: Na linha 5 adicionamos a referncia a classe Data Annotations. Como
mencionado anteriormente, o namespace ComponentModel que traz a classe
Data Annotations j nativo na framework a partir da verso 2. Esta classe
encapsula todos os atributos e demais recursos para efetuar a validao de
modelo. Na linha 6 trazemos ao contexto da classe o namespace MVC.
Linha
10:
Decoramos
a
classe
tbUsuarios
com
o
atributo
[MetadataType(typeof(UsuariosMetadata))]. Basicamente o que estamos fazendo
aqui informar a framework que as alteraes escritas para tbUsuarios devem
ser revertidas para o que est sendo implementado pela classe
UsuariosMetadata.
Linha 11: Aqui criamos a classe parcial tbUsuarios. No entraremos em maiores
detalhes aqui sobre classes parciais, pois este no o foco deste artigo, mas,
basicamente, precisamos que tbUsuarios seja parcial porque estamos
adicionando novos comportamentos a classe tbUsuarios gerada pelo EF4, sem
necessariamente precisarmos alterar o contedo da classe original.
Linha 15: Dizemos atravs do atributo Bind que ao efetuar o binding das
informaes, a prpriedade IDUsuario deve ser desconsiderada. Isso porque
IDUsuario do tipo autoincrement e, por consequncia, no precisamos bindar
seu valor.
Linha 16: Criamos a classe UsuariosMetadata.
Linhas 19, 22 e 25: Criamos as propriedades da classe. A observao importante
aqui , como estamos trabalhando no contexto do modelo de dados e estamos
escrevendo uma classe partial, baseada naquela gerada pelo EF4, os tipos e
nomes das propriedades devem ser os mesmos.
Linhas 18, 21 e 24: Adicionamos os atributos Required a cada uma das
propriedades onde queremos que os valores sejam obrigatrios.
O passo seguinte, consiste em validarmos o modelo no momento do postback. Para isso,
abra o controller UsuariosController e localize a action Create decorada com o atributo
HttpPost. Substitua o contedo da action por aquele apresentado na Listagem 2.
[HttpPost]
public ActionResult Create(tbUsuarios objUsuario)
{
TryUpdateModel(modelo);
if (ModelState.IsValid)
{
modelo.AddTotbUsuarios(objUsuario);
modelo.SaveChanges();
return RedirectToAction("Index");
}
else
{
return View();
}

}
Listagem 2: Validando o modelo de dados no postback
O que fazemos acima, conforme mencionado anteriormente, consiste na validao do
modelo de dados antes do envio das informaes. Assim, importante observar primeiro
a linha 4, onde encontramos TryUpdateModel(modelo). Aqui, como o prprio nome do
mtodo sugere, estamos tentando validar o modelo de dados. Em seguida, verificamos
atravs de um if se o modelo valido e, em caso afirmativo, enviamos os dados, como
pode ser visto nas linhas 6, 8, 9 e 10.
Ao finalizar este processo e executar sua aplicao, se tudo correu bem, voc dever
estar visualizando a tela semelhante a Figura 1.

Figura 1: Formulrio sendo validado


Voc deve estar se perguntando: mas como a view sabe onde exibir os erros? A resposta
est na prpria view. Abra o arquivo Create.aspx. A Listagem 2 apresenta o cdigo da
view.
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<SitePessoalMVC.Models.tbUsuarios>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Create
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Create</h2>
<% using (Html.BeginForm()) {%>
<%: Html.ValidationSummary(true) %>

<fieldset>
<legend>Fields</legend>
<div class="editor-label">
<%: Html.LabelFor(model => model.NomeCompleto) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.NomeCompleto) %>
<%: Html.ValidationMessageFor(model => model.NomeCompleto) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Username) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Username) %>
<%: Html.ValidationMessageFor(model => model.Username) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Password) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Password) %>
<%: Html.ValidationMessageFor(model => model.Password) %>
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
<% } %>
<div>
<%: Html.ActionLink("Back to List", "Index") %>
</div>
</asp:Content>
Listagem 2: View do formulrio de cadastro
O segredo est nas linhas 22, 30 e 38.Como possvel notar, os dados so exibidos
atravs do helper Html atravs do mtodo ValidationMessageFor( model =>
model.Propriedade ). O helper est ligado diretamente ao modelo. Como estamos
manipulando diretamente as propriedades da classe me (do modelo), ao os decorarmos
com os atributos de Data Annotations as mudanas so refletidas no mtodo
ValidationMessageFor atravs da expresso lambda.
Por hoje era isso pessoal. Por favor, ao finalizar a leitura deste artigo, deixe seu
comentrio. No demora 1 minuto e de fundamental importncia para que possamos
melhorar a qualidade dos textos. No prximo artigo aprenderemos a trabalhar com rotas
personalizadas. No percam! At l!

ASP.NET MVC Incio, Meio e Fim Parte 6


Nos artigos anteriores desta srie, vimos uma srie de conceitos fundamentais
relacionados a construo de aplicaes sob a framework ASP.NET MVC. Entendemos
como funciona o roteamento de urls, como se d a interao entre os mdulos de uma
aplicao MVC, como se d o acesso a dados em uma aplicao MVC com o Entity
Framework 4 e como possvel validar informaes de formulrios utilizando Data
Annotations. Caso no tenha efetuado a leitura dos artigos anteriores e no possua os
conhecimentos equivalentes, recomendo fortemente a leitura destes. Os links para eles
podem ser encontrados abaixo.
1. ASP.NET MVC Incio, Meio e Fim Parte 1 Conhecendo a framework ASP.NET
MVC
2. ASP.NET MVC Incio, Meio e Fim Parte 2 Criando nossa primeira aplicao
3. ASP.NET MVC Incio, Meio e Fim Parte 3 Criando nosso primeiro controller
4. ASP.NET MVC Incio, Meio e Fim Parte 4 Acessando e manipulando dados
com EF4
5. ASP.NET MVC Incio, Meio e Fim Parte 5 Validando informaes com Data
Annotations
Neste artigo, veremos de forma simplificada como podemos criar rotas personalizadas
para nossas aplicaes ASP.NET MVC e qual a utilidade deste recurso para aplicaes
especficas.
A importncia das rotas
Umas das principais caractersticas do ASP.NET MVC proporcionar ao desenvolvedor
flexibilidade no processo de construo de suas aplicaes web.
Por default, a framework disponibiliza um padro de roteamento, entrentanto, este no
precisa necessariamente ser adotado para a aplicao. Para a maioria das aplicaes
ASP.NET MVC, o padro de roteamento fornecido pela framework (vide Listagem 1)
atende as necessidades, entretanto, para algumas aplicaes este padro no pode ser
aplicado e, neste cenrio, surge a necessidade de adicionar/personalizar rotas.
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter
defaults
);
Listagem 1: Rota padro fornecida pela framework MVC
O trecho de cdigo apresentado pela Listagem 1 pode ser encontrado no arquivo
Global.asax de seu projeto. Para o modelo proposto, a framework rotear as solicitaes
do browser da seguinte forma: http://seudominio/controller/action/valor. Vamos
imaginar, por exemplo, que quisssemos uma estrutura de loja virtual, onde precisamos
de uma url definida da seguinte forma:
http://lojavirtual.com.br/eletronicos/games/consoles/xbox/ ou ento algo do tipo,
http://meublog/Arquivo/10-01-2011. O modelo padro de roteamento apresentado pela
Listagem 1 no se adequaria aos cenrios propostos, correto?
Para que possamos entender como se d este processo de construo de rotas
personalizadas, construiremos uma nova aplicao ASP.NET MVC e adicionaremos uma
nova instncia de rota de modo a satisfazer o segundo cenrio proposto, ou seja, a rota
dever atender a seguinte url: http://meublog/Arquivo/10-01-2011. Finalmente,

efetuaremos os testes para verificar o sucesso desta aplicao.


Trabalhando com rotas personalizadas
O primeiro passo consiste na criao do novo projeto. Crie um projeto do tipo ASP.NET
MVC 2 Web Application e nomeie-o conforme a convenincia. A Figura 1 apresenta este
processo.

Figura 1: Criando o novo projeto RotasPersonalizadasBlog


Na Solution Explorer de seu projeto, d um duplo clique sobre o arquivo Global.asax. O
cdigo apresentado por este arquivo deve ser semelhante aquele apresentado pela
Listagem 2.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace RotasPersonalizadasBlog
{
// Note: For instructions on enabling IIS6 or IIS7 classic mode,
// visit http://go.microsoft.com/?LinkId=9394801
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters

new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter


defaults
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
}
}
}
Listagem 2: Cdigo gerado pela framework em Global.asax
No primeiro e no segundo artigo desta srie falamos detalhadamente sobre cada linha
importante deste arquivo. Basicamente, temos a criao e registro da rota padro da
aplicao. O que faremos a seguir , incluir uma nova instncia de roteamento para a
aplicao. Assim, quando a url http://meublog/Arquivo/10-11-2011 for chamada, a
framework a rotear por padro. Assim, na linha 18 do cdigo apresentado pela Listagem
2, adicione o trecho de cdigo apresentado pela Listagem 3.
routes.MapRoute(
"BlogRoute",
"/Arquivo/{DataEntrada}",
new { Controller = "Arquivo", Action = "Entrada" }
);
Listagem 3: Adicionando uma nova instncia de rota BlogRoute
Como possvel notar na Listagem 3, estamos adicionando uma nova rota chamada
BlogRoute, estamos dizendo que a url padro a ser roteada /Arquivo/{DataEntrada} e
os valores padro so Controller = Arquivo, Action = Entrada". A Listagem 4 apresenta
o cdigo completo do arquivo Global.asax.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace RotasPersonalizadasBlog
{
// Note: For instructions on enabling IIS6 or IIS7 classic mode,
// visit http://go.microsoft.com/?LinkId=9394801
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(

"BlogRoute",
"/Arquivo/{DataEntrada}",
new { Controller = "Arquivo", Action = "Entrada" }
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter
defaults
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
}
}
}
Listagem 4: Cdigo final do arquivo Global.asax
Uma observao importante a ordem de insero da nova instncia. Note, temos
primeiro a nova rota (BlogRoute) e depois a rota padro (Default). Isso indica a framework
que a rota a ser considerada primeiro BlogRoute e no Default. Vamos agora criar o
controller Arquivo, responsvel por retornar o post da data de entrada. Para isto, clique
com o boto direito do mouse sobre a pasta Controllers, em seguida Add e Controller.
Nomeie-o como ArquivoController e pressione OK. Em seguida, substitua o contedo
do controller recm criado por aquele apresentado pela Listagem 5.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace RotasPersonalizadasBlog.Controllers
{
public class ArquivoController : Controller
{
//
// GET: /Arquivo/
public ActionResult Entrada(DateTime DataEntrada)
{
ViewData["Mensagem"] = "A data de entrada foi: " + DataEntrada.ToString();
return View();
}
}
}

Listagem 5: Controller que trata a requisio tendo a data como parmetro


O cdigo da Listagem 5 extremamente simples. Note que, ao criarmos o controller,
informamos que o parmetro de entrada DataEntrada e este, um objeto DateTime.
importante frisar que, ao informarmos na url por exemplo, http://meublog/Arquivo/1001-2010, a framework automaticamente entende este ltimo valor como DateTime, assim,
qualquer outro tipo de parmetro que a framework no consiga converter, acarretar em
erro no momento do processamento, conforme ilustra a Figura 3. A Figura 2 apresenta a
aplicao em execuo e o correto funcionamento da mesma.

Figura 2: View retornando o valor esperado de acordo com a url

Figura 3: Erro ao chamar a url com parmetros incorretos

importante obervar que existem diversos outros aspectos relacionados ao roteamento


de aplicaes MVC. Dentre as muitas opes que possumos para trabalharmos com
rotas, destacam-se: possibilidade de criao de rotas personalizadas, validao de rotas,
etc. Como esta srie introdutria, este artigo no aborda aspectos avanados,
entretanto, em artigos futuros, estes e outros assuntos podero ser abordados
.
Bom pessoal, vamos ficando por aqui. Quaisquer dvidas, por favor, entre em contato
comigo atravs da seo de contato deste site, do twitter ou do facebook. Na medida do
possvel, terei o maior prazer em respond-los. No se esquea de deixar seus
comentrios. Eles so muito importantes para a melhoria do contedo gerado neste site.

Das könnte Ihnen auch gefallen