Desde o lançamento da plataforma Microsoft .NET, passamos a contar com um framework de desenvolvimento de aplicações Web chamado ASP .NET, que oferece diversos componentes de base para a criação destas aplicações, como por exemplo, autenticação, autorização, controlo de sessões dos utilizadores, cookies, entre outras funcionalidades, juntamente com um modelo de programação baseado em páginas e eventos que permite desenvolver aplicações Web de uma forma muito semelhante ao desenvolvimento de aplicações Windows Forms.
Este modelo de programação chama-se ASP .NET WebForms, e era o único modelo existente no framework ASP .NET até o início de 2009, quando foi então lançado pela Microsoft a primeira versão do ASP .NET MVC, que é uma alternativa ao modelo WebForms existente, e oferece um modelo de programação muito mais simplificado e directo, e baseado num padrão (design pattern) bastante conhecido e utilizado em vários outros frameworks e plataformas, chamado Model-View-Controller (MVC).
Assim, actualmente um developer que queira desenvolver uma aplicação Web na plataforma Microsoft .NET tem à sua disposição duas alternativas ou modelos de programação que pode escolher de acordo com a sua preferência: ASP .NET WebForms e ASP .NET MVC.
A versão mais recente do ASP .NET MVC no momento em que escrevo este artigo é a 3.0 RTM, disponibilizada recentemente pela Microsoft, e que está disponível para download gratuitamente através do seguinte endereço: http://caiop.me/HVqR72
É importante destacar que o ASP .NET MVC 3.0 utiliza novos recursos que fazem parte do .NET Framework 4.0, e por isso necessita ter esta versão do .NET Framework e o Visual Studio 2010 para desenvolver aplicações (não é possível utilizar o Visual Studio 2008).
O Visual Studio 2010 não inclui o ASP .NET MVC 3.0, mas sim o ASP .NET MVC 2.0, portanto a versão 3.0 deve ser instalada manualmente.
Model-View-Controller (MVC)
O padrão Model-View-Controler ou MVC permite separar o código necessário para interagir com a interface com utilizador através de três conceitos: Model, View e Controller, onde cada um tem uma responsabilidade específica.

No ASP .NET MVC, um Controller corresponde a uma classe que pode ser responsável por receber as informações solicitadas pelo cliente (navegador), e enviar uma resposta num formato apropriado, de acordo com a solicitação que recebeu.
O recebimento das informações acontece através de métodos existentes nesta classe (Controller), chamados Action. Um Controller pode possuir uma ou mais acções (Actions) possíveis de serem executadas, e cada Action é então responsável por receber as informações enviadas através do cliente (navegador) efectuar qualquer processamento que seja necessário e então enviar a resposta apropriada.
Para enviar esta resposta, a Action do Controller interage com o modelo aplicacional (Model) geralmente composto de várias classes que implementam a lógica de negócio da aplicação, e desta forma, o Controller consegue preparar a resposta a ser enviada de volta para o cliente (navegador).
Esta resposta normalmente corresponde a uma View, cuja responsabilidade é construir a resposta ao pedido solicitado, no formato apropriado. As Views normalmente são compostas por código HTML, CSS, e JavaScript, misturado com trechos de código C# ou VB .NET utilizando uma sintaxe chamada Razor.
Este modelo de programação traz uma série de benefícios aos developers, como:
- É possível ter diferentes representações (Views) de uma mesma informação (Model);
- Novas interfaces com o utilizador (Views) podem ser facilmente adicionadas, removidas ou alteradas, sem grande impacto ao restante da aplicação;
- A resposta a uma requisição pode ser facilmente alterada (pois está centralizada num Controller);
- Promove a reutilização de código (Por exemplo: Um mesmo Model pode ser utilizada com diferentes Views);
- E provavelmente o mais importante: Ajuda os developers a manterem o foco em um único aspecto da aplicação, de cada vez.
Funcionamento do ASP .NET MVC 3
Quando o framework inicia o processamento de uma requisição, obtém um determinado endereço (URL) que é então utilizado para determinar qual será o Controller que será responsável por responder a esta requisição, e qual será a Action deste Controller que será executada. Por exemplo:
http://portugal-a-programar.org/revista/edicoes
No exemplo acima, o framework ASP .NET MVC analisa o texto da URL que está após o endereço do site, e identifica “revista” como sendo o nome do Controller que deve ser responsável por responder a esta requisição, e “edicoes” como sendo o nome do método (Action) a ser executado neste Controller.
Para que esta requisição seja processada com sucesso, é preciso que um dos assemblies do projecto (ou em assemblies referenciados) possua uma classe com as características abaixo, caso contrário a resposta enviada será um erro do tipo “404 Not Found“:
- Precisa ser uma classe pública (public);
- Precisa ser uma classe concreta (deve ser possível instanciar objectos desta classe… Não pode ser uma classe abstrata (abstract), ou uma interface);
- Precisa ser uma classe derivada da classe System.Web.MVC.Controller;
- Precisa ser uma classe que tenha o mesmo nome identificado através da URL como sendo o nome da Controller, seguido da palavra “Controller“, e precisa ter um método com o mesmo nome identificado na URL como sendo a Action a ser executada, e que retorne um objecto do tipo System.Web.Mvc.ActionResult ou de uma classe derivada desta.
No exemplo acima, a classe responsável por processar este tipo de requisições (http://portugal-a-programar.org/revista/edicoes) deve chamar-se RevistaController, e deve possuir um método chamado Edicoes.
Caso o nome do Controller e/ou da Action não esteja presente no endereço (URL), a aplicação ASP .NET MVC assume os valores “Home” para Controller e “Index” para Action, ou seja, para uma requisição do tipo http://portugal-a-programar.org/ onde não são informados os valores para Controller e Action, espera-se que exista uma classe chamada “HomeController” que por sua vez possua um método chamado “Index“.
Esta é a convenção padrão que está definida no ficheiro Global.asax e que pode ser alterada se desejar:
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
);
}
Criando o seu primeiro projecto ASP .NET MVC 3
Para iniciar um novo projecto ASP .NET MVC 3, a partir do Visual Studio 2010 deve aceder ao menu File, seleccionar New, e então Project, onde poderá seleccionar o tipo de projecto “ASP.NET MVC 3 Web Application“, e definir o nome do projecto e o local onde será gravado.

A seguir será apresentado um ecrã onde onde pode escolher o template que deseja utilizar para o novo projecto, o View Engine (mecanismo que será utilizado para construir as Views), e tem a opção de criar um projecto de testes unitários para acompanhar este novo projecto que está a ser criado.

Os templates que pode escolher são: “Empty“, “Internet Application“, e “Intranet Application“. A principal diferença entre os três é que tanto o “Internet Application” quanto o “Intranet Application” já incluem algumas classes, controllers e views de exemplo que podem ser utilizadas como base para o desenvolvimento da aplicação, enquanto que o “Empty” apenas uma estrutura mínimo necessária para começar.
Os View Engines que pode escolher são “ASPX” e “Razor“. O View Engine define, entre outras coisas, a linguagem que será utilizada para a construção das Views, onde o mistura-se código HTML e JavaScript com código C# (ou VB .NET). ASPX é o View Engine que foi introduzido na primeira versão do ASP .NET, juntamente com o modelo WebForms e possui uma sintaxe que utiliza tags do tipo “<% … %>” para identificar os trechos de código. Já o Razor é a grande novidade do ASP .NET MVC 3 e possui uma sintaxe simplificada e considerada mais elegante, pelo que é o View Engine padrão do ASP .NET MVC 3.
Para o exemplo explicado neste artigo, foi seleccionado o template “Empty” e o View Engine “Razor“.
Ao criar o novo projecto “ASP.NET MVC 3 Web Application” é criada uma estrutura como mostra a figura abaixo:

- Content: Pasta onde deve colocar as imagens e estilos (CSS) utilizados no projecto;
- Controllers: Pasta onde deve colocar todos os Controllers da aplicação;
- Models: Pasta onde deve colocar os serviços, repositórios e outras classes que implementam a lógica da aplicação;
- Scripts: Pasta onde deve colocar os ficheiros JavaScript utilizados no projecto;
- Views: Pasta onde deve colocar os ficheiros responsávels por construir as Views.
Esta é uma estrutura sugerida e pode ser completamente alterada se desejar (necessita de alguns tweaks em alguns casos).
Criação da página inicial do site
Para criar a página inicial (home-page) da aplicação Web, o primeiro passo é criar o controller chamado “HomeController” (que é uma classe com este nome), que será responsável por receber/responder requisições feitas para a página principal do site.
Para isto, clique com o botão direito na pasta Controllers no Solution Explorer, seleccione “Add” e então “Controller…“. No nome do controller defina “HomeController” e seleccione “Add“.
Será criado um ficheiro com o home “HomeController.cs” (ou .vb se utiliza Visual Basic .NET) na pasta “Controllers” com o seguinte conteúdo:
using System.Web.Mvc;
namespace Portugal_a_Programar.Web.Controllers
{
public class HomeController : Controller
{
//
// GET: /Home/
public ActionResult Index()
{
return View();
}
}
}
A partir deste momento, ao executar esta aplicação, qualquer requisição feita para a home-page do site (ex: http://portugal-a-programar.org/ ou http://localhost:1234/) fará com que um novo objecto da classe HomeController seja automaticamente instanciado pelo framework ASP .NET MVC, e o método Index será executado. A resposta deste método Index será então enviada de volta para o cliente (navegador) que fez a requisição.
O método Index neste exemplo possui apenas uma chamada para um outro método da própria classe chamado View, um método herdado da classe Controller. O que este método faz é solicitar ao View Engine que seja construída uma determinada View, e como não foram passados parâmetros, este método assume que a View possui o mesmo nome do método (Index, neste caso), e que está dentro de uma pasta com o mesmo nome do Controller que está a ser executado (Home, neste caso).
O próximo passo é criar esta View chamada “Index“, na estrutura de pastas do projecto. Para isso, vá ao Solution Explorer e dentro da pasta Views crie uma nova pasta chamada “Home” (botão direito na pasta “Views” => “Add” => “New Folder“), e então clique com o botão direito nesta nova pasta e seleccione “Add” e então “View…“. No nome da View defina “Index” e seleccione “Add“.
Será criado um ficheiro com o home “Index.cshtml” (ou .vbhtml se utiliza Visual Basic .NET) na pasta “Views\Home” com o seguinte conteúdo:
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
Neste momento, o projecto possui uma estrutura similar a figura abaixo:

E já consegue executar a aplicação e visualizar a página inicial com a palavra “Index”. Para executar a aplicação, basta seleccionar o botão “Play” no Visual Studio, ou utilizar as teclas de atalho (F5 ou CTRL + F5).
