Download - ASP.net Mvc – Início, Meio e Fim

Transcript

ASP.NET MVC Incio, Meio e Fim Parte 1H 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-View-Controller), 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 MVCO 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 rotasQuando 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 URLnew { 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/1854Na 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 2No 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-View-Controller 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 MVCA 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 2008A 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.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.

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-7106-44A7-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 2Aps 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 projetoCom 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 MVCQuando 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 unitriosSe 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 execuoComo 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 aplicaoPara 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 projetoO 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 aplicaoA 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 expandidaPara 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 MVCDaqui 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 parametersnew { 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 aplicaoNote 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 urlPara 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 HomeVoc 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.

Home Page

To learn more about ASP.NET MVC visit http://asp.net/mvc.

Listagem 3: Cdigo da view IndexComo 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 o ViewData retornado pela action.ConclusoAps 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 3No 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 aplicaoA 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:A informao contida entre as tags h1;

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.

My MVC Application

Listagem 1: Trecho de cdigo a ser personalizado

FabricioSanchez!

Listagem 2: Trecho de cdigo personalizadoEm 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 , Usurios e Notcias.

Uma observao importante sobre a criao dos novos tens de menu a ausncia das tags 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 execuoCada 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 ControllerConforme 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.

Listagem 3: Parametrizao do mtodo ActionLink do helper HtmlO 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 UsuariosAo 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 actionsMuito 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 UsuriosComo 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 lista = new Dictionary();

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 usuriosO 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 viewPara 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 actionA seguir, adicione o cdigo apresentado pela Listagem 6 na view recm criada.Gerenciamento de Usurios

Gerenciamento de Usurios

Listagem 6: Exibindo os dados retornados pela actionO 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 execuoBom 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/wp-content/uploads/2010/12/Final_Site.wmv' ]ASP.NET MVC Incio, Meio e Fim Parte 4Este 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:ASP.NET MVC Incio, Meio e Fim Parte 1 O que ASP.NET MVC e para que serve?

ASP.NET MVC Incio, Meio e Fim Parte 2 Criando e entendendo a estrtura de uma aplicao

ASP.NET MVC Incio, Meio e Fim Parte 3 Criando e entendendo Controllers, Actions e Views

Acessando dados com ASP.NET MVCNo 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 FrameworkMuito 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 aplicaoPara 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 exemploEm 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 StudioO 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 dadosCom 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 aplicaoAo 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-existenteA 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 dadosSe 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 conexoClicando 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 fsicoSe 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 usuriosCom 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 viewComo 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 CreateConforme 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:

Create

Create

Fields

model.IDUsuario) %>

model.IDUsuario) %> model.IDUsuario) %>

model.NomeCompleto) %>

model.NomeCompleto) %> model.NomeCompleto) %>

model.Username) %>

model.Username) %> model.Username) %>

model.Password) %>

model.Password) %> model.Password) %>

Listagem 2: Cdigo da view Create.aspxA 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 execuoEvidentemente 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 fornecidosA 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 sucessoVoc 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 cadastradosAgora 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.tbUsuariosorderby u.NomeCompleto ascendingselect 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 cadastradosEditando informaes de usuriosJ criamos rotinas para adicionar novos usurios ao sistema e listar estes usurios. Falta-nos 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.tbUsuarioswhere us.IDUsuario == idselect us;return View(usuarioSel.Single());}

Listagem 5: Gerando formulrio com dados do usurio selecionadoSem 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.tbUsuarioswhere us.IDUsuario == idselect us;UpdateModel(usuarioSel.SingleOrDefault());modelo.SaveChanges();

return RedirectToAction("Index");}catch{return View();}}

Listagem 6: Atualizando dados do usurio selecionadoNa 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 usurioRemovendo registros da base de dadosFinalmente, 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.tbUsuarioswhere ud.IDUsuario == idselect ud;return View(usuarioDel.SingleOrDefault());}

Listagem 7: Selecionando o registro para remooSim 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 remooAo 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.tbUsuarioswhere ud.IDUsuario == idselect ud;modelo.DeleteObject(usuarioDel.SingleOrDefault());modelo.SaveChanges();

return RedirectToAction("Index");}catch{return View();}}

Listagem 8: Removendo o usurio da base de dadosA 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 sucessoConclusesEste 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 5No 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 AnnotationsData 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 AnnotationsLinha 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 postbackO 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 validadoVoc 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.

Create

Create

Fields

model.NomeCompleto) %>

model.NomeCompleto) %> model.NomeCompleto) %>

model.Username) %>

model.Username) %> model.Username) %>

model.Password) %>

model.Password) %> model.Password) %>

Listagem 2: View do formulrio de cadastroO 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 6Nos 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.ASP.NET MVC Incio, Meio e Fim Parte 1 Conhecendo a framework ASP.NET MVC

ASP.NET MVC Incio, Meio e Fim Parte 2 Criando nossa primeira aplicao

ASP.NET MVC Incio, Meio e Fim Parte 3 Criando nosso primeiro controller

ASP.NET MVC Incio, Meio e Fim Parte 4 Acessando e manipulando dados com EF4

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 rotasUmas 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 parametersnew { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults);

Listagem 1: Rota padro fornecida pela framework MVCO 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 personalizadasO 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 RotasPersonalizadasBlogNa 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 parametersnew { 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.asaxNo 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 BlogRouteComo 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 parametersnew { 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.asaxUma 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 parmetroO 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/10-01-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.