Lançamento da ASP.NET MVC Preview 3

Hoje pela manhã nós lançamos a Preview 3 do framework ASP.NET MVC. Eu escrevi em detalhes no mês passado sobre um lançamento ínterim do código que incluiu muitas das mudanças desta Preview 3. O lançamento de hoje inclui alguns recursos adicionais não inclusos no lançamento do mês passado, bons melhoramentos/refinamentos como também a integração das ferramentas e da documentação no Visual Studio.

Você pode fazer o download de um pacote integrado da ASP.NET MVC Preview 3  aqui. Você também pode opcionalmente fazer o download do código fonte e dos testes unitários do framework da ASP.NET MVC Preview 3  aqui.

Mudanças nos Métodos de Ação do Controlador

A ASP.NET MVC Preview 3 inclui as mudanças do Controlador que nós primeiramente discutimos e previmos com o lançamento do código MVC de Abril, juntamente com alguns ajustes.

Você pode continuar a escrever métodos de ação do controlador que retornam void encapsulando toda a lógica dentro do método de ação. Por exemplo:

o qual renderizará o HTML mostrado a seguir quando executado:

A Preview 3 agora também suporta o uso de uma abordagem onde você retorna um objeto "ActionResult" que indica o resultado do método de ação, e permite a execução adiada do mesmo. Isto torna o teste unitário de ações muito mais fácil (sem a necessidade de simular qualquer coisa). Isto também torna a composição muito mais limpa e fornece o completo controle do fluxo de execução.

Por exemplo, nós poderíamos usar LINQ para SQL dentro do nosso método de ação Browse para retornar uma seqüência de objetos do tipo Produto do nosso banco de dados e indicar que nós queremos renderizar uma Visão dos mesmos. O código a seguir irá fazer com que três partes do "ViewData" sejam passadas para a visão - os valores de string "Title" e "CategoryName" e uma seqüência fortemente tipificada de produtos (passada como o objeto ViewData.Model):

Uma vantagem de usar a abordagem ActionResult mostrada acima é que esta torna o teste unitário das ações do Controlador realmente fácil (sem necessidade de simulação). Abaixo está um teste unitário que verifica o comportamento do nosso método de ação Browse:

Nós podemos então autorar uma ViewPage "Browse" dentro do subdiretório \Views\Products para renderizar uma resposta usando o ViewData populado por nossa ação Browse:

Quando nós chegarmos na URL /Products/Browse/Beverages nós iremos então receber uma resposta HTML igual a seguir (com os três usos do ViewData circulados em vermelho):

Note que além de suportar uma resposta "ViewResult" (para indicar que uma Visão deverá ser renderizada), a ASP.NET MVC Preview 3 também adiciona suporte para retornar "JsonResult" (para a cenários de serialização AJAX JSON), "ContentResult" (para transportar conteúdo sem uma Visão), como também resultados HttpRedirect e RedirectToAction/Route.

A abordagem completa ActionResult é extensível (permitindo que você crie seus próprios tipos de resultados) e com o tempo você verá que nós adicionaremos mais tipos de resultado padrão.

Métodos de Ajuda HTML Melhorados

Os métodos de ajuda HTML foram atualizados com a ASP.NET MVC Preview 3. Além de vários consertos para bugs, eles também incluem várias melhorias de usabilidade.

Busca Automática de Valor

Com os lançamentos da previews anteriores você precisava sempre explicitamente passar o valor a ser renderizado quando os métodos de ajuda Html eram chamados. Por exemplo: para incluir um valor dentro de um elemento <input type="text" value="some value"/> você escreveria:

O código acima continua funcionando - embora agora você pode também simplesmente escrever:

Os métodos de ajuda HTML irão agora por padrão checar ambos o dicionário ViewData e qualquer objeto do Modelo passado para a visão para uma chave ProductName ou valor de propriedade a ser usada.

ViewModels SelectList e MultiSelectList

Novas classes ViewModel SelectList e MultiSelectList estão agora presentes, as quais provêem um meio limpo para popular dropdowns HTML e listboxes de multi-seleção (e gerenciam as coisas igual a seleção corrente, etc). Uma abordagem que pode tornar cenários de formulários mais limpos é instanciar e configurar estes objetos ViewModel em uma ação do Controlador, e então passá-los no dicionário ViewData para a Visão formatar/renderizar.

Por exemplo, a seguir eu estou criando uma classe view-model SelectList sobre o conjunto de categorias únicas de nosso banco de dados. Eu estou indicando que eu quero usar a propriedade "CategoryID" como o valor de cada item na lista, e "CategoryName" como o texto a ser mostrado. Eu também estou configurando a seleção da lista para a CategoryId do Produto que estamos editando:

Dentro de nossa visão nós então simplesmente temos que escrever o código a seguir para indicar que queremos criar uma drop-down list com referência à SelectList que nós colocamos dentro do ViewData.

Isto irá então renderizar o drop down apropriado com os itens e a seleção para nós no tempo de execução:

Suporte à validação de erros embutida aind não está incluída nos nossos métodos de ajuda HTML (você pode atualmente ter que escrever código para isto) - mas aparecerá no futuro, o que tornará a edição dos formulários ainda mais fácil.

Você também começará a ver métodos de ajuda ASP.NET AJAX aparecerem em lançamentos futuros das previews, o que tornará mais fácil integrar AJAX dentro de aplicações MVC com um mínimo de código.

Melhorias no roteamento de URL

A ASP.NET MVC Preview 3 inclui várias melhorias no sistema de roteamento de URL. Roteamento de URL é um dos componentes mais "fundamentais" do framework MVC, logo a razão para gastarmos tanto tempo focando nesta área nas primeiras previews para ter esta área bem ajustada. Nosso novo motor de roteamento de URL será lançado no .NET 3.5 SP1 neste verão, e iremos suportar ambos Formulários Web e requisições MVC. A ASP.NET MVC será capaz de usar o motor de roteamento embutido no .NET 3.5 SP1 quando executado no .NET 3.5 SP1. A ASP.NET MVC também irá incluir sua própria cópia do assembly de forma que esta também poderá funcionar em sistema não SP1.

Alguns dos melhoramentos feitos no roteamento de URL nesta Preview 3 incluem:

Métodos de ajuda MapRoute() e IgnoreRoute()

A ASP.NET MVC Preview 3 inclui novos métodos de ajuda "MapRoute" e "IgnoreRoute" que você pode usar para mais facilmente registrar regras de roteamento. MapRoute() provê um meio para adicionar uma nova regra de rota MVC na coleção de Rotas. IgnoreRoute() provê um meio fácil para dizer ao sistema de roteamento de URL para parar o processamento de certos padrões de formação de URL (por exemplo: tratador de recursos .axd na ASP.NET que serão usados para servir JavaScript, imagens, etc).

Abaixo está um exemplo do método padrão RegisterRoutes() dentro do Global.asax quando você cria um novo projeto ASP.NET MVC onde você pode ver ambos os novos métodos de ajuda em ação.

O método de ajuda MapRoute() é sobrecarregado e recebe dois, três ou quarto parâmetros (nome da rota, sintaxe da URL, parâmetro padrão da URL, e parâmetros opcionais de URL com restrições expressas através de expressões regulares).

Você pode chamar MapRoute() quantas vezes você quiser para registrar múltiplas rotas nomeadas no sistema. Por exemplo, além da regra de convenção padrão, nós poderíamos adicionar uma regra de roteamento nomeada "Products-Browse" igual a seguir:

Nós podemos então referenciar esta regra "Products-Browse" explicitamente dentro de nossos Controladores e Visões quando quisermos gerar uma URL. Por exemplo, nós poderíamos usar o método de ajuda da visão Html.RouteLink para indicar que nós queremos linkar para nossa rota "Products-Browse" e passar para esta um parâmetro de categoria "Food" usando código presente no modelo de nossa visão igual a seguir:

Este método de ajuda da visão então acessa o sistema de roteamento e gera um hyperlink HTML para uma URL apropriada igual a seguir (note: como automaticamente ocorreu a substituição do parâmetro de categoria dentro da URL usando a regra de rota):

Nós poderíamos alternadamente usar o novo Url.RouteUrl(routeName, values) dentro das visões se quiséssemos simplesmente retornar a URL para uma rota nomeada (e não gerar um elemento html <a>).

Nós também poderíamos usar o novo método de ajuda RedirectToRoute(routeName, values) na classe base do Controlador para lançar redirecionamentos de browser baseados em regras de roteamento nomeadas.

Recursos de Mapeamento de Rotas mais Ricos

A ASP.NET MVC Preview 3 também suporta vários novos recursos de roteamento de URL. Você pode agora incluir  "-", ".", ";" ou qualquer outro caractere que você queira como parte de suas regras de roteamento.

Por exemplo, usando um separador "-" você pode traduzir a linguagem e localização de valores de suas URLs separadamente usando uma regra igual a seguir:

Isto passaria os parâmetros de "linguagem", "local" e "categoria" apropriados para um método de ação ProductsController.Browse quando invocado:

Regra de Roteamento da URL URL de exemplo Parâmetros passados para o Método de Ação
{language}-{locale}/products/browse/{category} /en-us/products/browse/food language=en, locale=us, category=food
  /en-uk/products/browse/food language=en, locale=uk, category=food

Ou você pode usar o tipo de extensão de arquivo "." no final da URL para determinar se deve renderizar o resultado em um formato XML ou HTML:

Isto passaria ambos os parâmetros "category" e "format" para o método de ação ProductsController.Browse quando invocado:

Regra de Roteamento da URL URL de exemplo Parâmetros passados para o Método de Ação
products/browse/{category}.{format} /products/browse/food.xml category=food, format=xml
  /products/browse/food.html category=food, format=html

A ASP.NET MVC Preview 3 também suporta regras de rotamento com wildcard - caractere coringa (estas já estavam presentes na Preview 2).  Por exemplo, você pode indicar em uma regra a passagem de todo o conteúdo restante adiante da URI como um parâmetro nomeado para um método de ação:

Isto passaria um parâmetro "contentUrl" para o método de ação WikiController.DisplayPage quando invocado:

Regra de Roteamento da URL URL de exemplo Parâmetros passados para o Método de Ação
Wiki/Pages/{*contentUrl} /Wiki/Pages/People/Scott contentUrl="People/Scott"
  /Wiki/Pages/Countries/UK contentUrl="Countries/UK"

Estas rotas com wildcard são muito úteis e devem ser consideradas se você estiver construindo um sistema baseado em blog, wiki, cms ou outro sistema baseado em conteúdo.

Sumário

O lançamento da Preview 3 de hoje da ASP.NET MVC inclui muitas melhorias e refinamentos. Nós estamos começando a nos sentir bem sobre o roteamento de URL e o modelo de programação Controller/Action da MVC, e sentimos que estas áreas estão começando a ficar no ponto. Nos lançamentos de futuras previews você começará a ver mais melhorias mais acima da pilha do modelo de programação em áreas como Visões (métodos de ajuda HTML, métodos de ajuda para validação, etc), AJAX, sub-controladores e composição de site, Login mais avançado, Autenticação, Autorização e integração de cacheamento, como também suporte a reconhecimento de dados.

Eu também tenho um post-tutorial (muito) longo que comecei a redigir neste último final de semana e que trata da construção de uma aplicação ASP.NET MVC Preview 3 que eu espero terminar e postar nos próximos dias. Este tutorial deve prover uma boa introdução à ASP.NET MVC como também ajudar no provimento de contexto em como todas as peças se encaixam se você estiver interessado em usar a opção ASP.NET MVC.

Espero que ajude,

Scott

 (Texto traduzido do post original por Leniel Macaferi.)

No Comments