Anunciando a ASP.NET MVC 3 RC2 (Candidata a Lançamento 2)


Hoje cedo, a equipe da ASP.NET lançou a versão Release Candidate RC2 (Candidata a Lançamento) da ASP.NET MVC 3. Você pode fazer o download e instalá-la aqui.

Quase lá...

A versão RC2 de hoje é a versão quase final da ASP.NET MVC 3, e é uma "candidata a lançamento" genuína na medida em que nós não pretendemos fazer mais alterações no código. Estamos publicando a mesma hoje para que as pessoas possam fazer testes finais com ela, nos informando se encontrarem algum problema de última hora "showstoppers", e para que possam começar a atualizar suas aplicações para fazer uso desta última versão. Vamos lançar oficialmente a versão final da ASP.NET MVC 3 "RTM", em Janeiro.

Funciona com o VS 2010 e VS 2010 SP1 Beta

O lançamento de hoje da ASP.NET MVC 3 RC2 funciona tanto com a versão de lançamento do Visual Studio 2010 / Visual Web Developer 2010 Express (que é gratuito), bem como o recém-lançado VS 2010 SP1 Beta (em Inglês). 

Isso significa que você não precisa instalar o VS 2010 SP1 (ou a versão beta do SP1) para usar a ASP.NET MVC 3. Ela funciona muito bem com a versão de lançamento do Visual Studio 2010. Vou escrever um post na próxima semana sobre algumas das coisas boas adicionais que acompanham o VS 2010 SP1 (incluindo o suporte para o IIS Express e para o SQL CE dentro do VS), que tornam a experiência de desenvolvimento para ASP.NET Web Forms e ASP.NET MVC ainda melhor.

Consertos de Bugs e Performance

O lançamento de hoje da ASP.NET MVC 3 RC2 contém muitas correções de bugs e otimizações de desempenho. Nossos últimos testes de desempenho indicam que a ASP.NET MVC 3 está mais rápida do que a ASP.NET MVC 2, e que as atuais aplicações ASP.NET MVC experimentarão um pequeno aumento de desempenho, quando atualizadas para rodar com a ASP.NET MVC 3.

Ajustes Finais

Além de correções de bugs e otimizações de desempenho, a RC2 de hoje contém um número de ajustes de última hora para recursos e alterações do tipo "fit-and-finish" (encaixar-e-terminar) para os novos recursos da ASP.NET MVC 3. Os comentários e sugestões que recebemos durante as amostras públicas têm sido de inestimável valor para nos orientar nestes ajustes finais, e nós realmente apreciamos o apoio das pessoas em nos enviar este retorno. 

A seguir está uma pequena lista de algumas das alterações de recursos/ajustes feitos entre a ASP.NET MVC 3 RC do mês passado e o lançamento da ASP.NET MVC 3 RC2 de hoje:

Atualizações para jQuery e adição da jQuery UI

Os modelos de projeto da ASP.NET MVC 3 foram atualizados para incluir a jQuery 1.4.4 e a jQuery Validation 1.7.

Nós também estamos animados em anunciar hoje que estamos incluindo a jQuery UI dentro de nossos modelos de projeto padrão da ASP.NET daqui por diante. A jQuery UI fornece um poderoso conjunto de elementos (widgets) e recursos adicionais para a interface do usuário (UI). Ela será adicionada por padrão na pasta \scripts do seu projeto quando você criar novos projetos ASP.NET MVC 3.

Criaçåo Automática de Visões (Scaffolding) Melhorada

Os modelos (templates) T4 usados para criar visões de maneira automática através da janela Add->View (Adicionar->Visão) agora gera visões que usam Html.EditorFor ao invés de métodos de ajuda como Html.TextBoxFor. Esta alteração permite que você opcionalmente anote os modelos com metadados (usando atributos de anotação de dados) para customizar de uma maneira melhor o código de saída de sua interface do usuário no tempo de execução.

A janela de diálogo Add->View também suporta uma detecção melhorada e uso de informações de chave primária em modelos (incluindo suporte para as convenções de nomenclatura como ID, ProductID, etc.). Por exemplo: a janela de diálogo Add View usa essas informações para garantir que o valor da chave primária não seja criado como um campo editável no formulário, e que os links entre as visões sejam gerados corretamente e automaticamente com informações de chave primária.

Os modelos padrão Edit (Editar) e Create (Criar) agora também incluem referências para aos scrips da jQuery necessários para a validação de dados no lado do cliente. Formulários de visão criados automaticamente (scaffolded) agora suportam a validação de dados no lado do cliente por padrão (sem etapas extras). Validação de dados no lado do cliente com a ASP.NET MVC 3 também é feita utilizando uma abordagem javascript discreta - tornando as páginas rápidas e limpas.

[ControllerSessionState] -> [SessionState]

A ASP.NET MVC 3 adiciona suporte para controladores sem sessão (session-less). Com a RC inicial você usava um atributo [ControllerSessionState] para especificar isso. Nós encurtamos esse atributo na RC2 para ser apenas [SessionState]:

imagem

Note que, além de desligar o estado da sessão, você também pode configurá-lo para ser somente de leitura - read-only (o que é útil para cenários de webfarm onde você está lendo, mas não atualizando o estado da sessão em uma determinada solicitação/request).

[SkipRequestValidation] -> [AllowHtml]

A ASP.NET MVC inclui suporte nativo para proteger contra Ataques de Injeção de HTML e Cross-Site Script e irá lançar um erro por padrão se alguém tentar postar conteúdo HTML como entrada de dados. Os desenvolvedores precisam indicar explicitamente que isto é permitido (e que eles tenham esperançosamente construído suas aplicações para suportar isso de uma forma segura) a fim de habilitar esse cenário.

Com a ASP.NET MVC 3, nós também estamos agora suportando um novo atributo que você pode aplicar em propriedades dos modelos/modelos de visão para indicar que a entrada HTML está habilitada, o que permite uma proteção muito mais granular de uma forma DRY.  Na versão RC do mês passado esse atributo era chamado [SkipRequestValidation]. Com a RC2, renomeamos o mesmo para [AllowHtml] para torná-lo mais intuitivo:

imagem

Definindo o atributo acima [AllowHtml] em um modelo/model de visão, fará como que a ASP.NET MVC 3 desligue a proteção contra injeção de HTML quando ela fizer a vinculação de dados (binding) apenas daquela propriedade.

Método de ajuda Html.Raw()

O novo motor de visão Razor introduzido com a ASP.NET MVC 3 automaticamente codifica o HTML de saída por padrão. Isso ajuda a fornecer um nível adicional de proteção contra ataques de injeção de HTML e de Script.

Com a RC2 estamos adicionando um novo método de ajuda Html.Raw() que você pode usar para indicar explicitamente que você não deseja codificar seu HTML de saída, e em vez disso quer renderizar o conteúdo do jeito "como está":

imagem

ViewModel/View -> ViewBag

A ASP.NET MVC tem suportado (desde a V1) um dicionário do tipo ViewData[] dentro de Controladores e Visões que permite aos desenvolvedores passar informações de um Controlador para uma Visão de uma maneira late-bound (vinculação tardia). Essa abordagem pode ser usada em vez de, ou em combinação com uma classe do modelo fortemente tipada. O código a seguir demonstra um caso de uso comum - onde um modelo Product fortemente tipado é passado para uma visão, além de duas variáveis atribuídas tardiamente através do dicionário ViewData[]:

imagem

Com a ASP.NET MVC 3 estamos introduzindo uma nova API que tira proveito do suporte a um tipo dinâmico incluído no .NET 4 para definir/recuperar esses valores. Ele permite que você use a notação "dot" padrão ( . ) para especificar qualquer número de variáveis adicionais a serem passadas, e não requer que você crie uma classe fortemente tipada para fazer isso.

Em amostras anteriores da ASP.NET MVC 3 nós expusemos essa API usando uma propriedade dinâmica chamada "ViewModel" na classe base do Controlador, e com uma propriedade dinâmica chamada "View" dentro de modelos de visão. Muita gente achou confuso o fato de haver dois nomes diferentes, e várias pessoas também disseram que usar o nome ViewModel nesse contexto era confuso - já que muitas vezes você cria classes ViewModel fortemente tipadas na ASP.NET MVC, e elas não usam esta API. 

Com a RC2 estamos expondo uma propriedade dinâmica que tem o mesmo nome - ViewBag - dentro de Controladores e Visões. É uma coleção dinâmica que lhe permite passar bits de dados adicionais a partir de seu controlador para o seu modelo de visão a fim de ajudar a gerar uma resposta. A seguir está um exemplo de como podemos usá-la para passar uma mensagem de data e hora, bem como uma lista de todas as categorias de produto para o nosso modelo de visão:

imagem

A seguir está um exemplo de como o nosso modelo de visão (que é fortemente tipado para esperar uma classe Product como seu modelo) pode usar os dois bits de informação adicionais que passamos em nossa ViewBag para gerar a resposta. Em particular, observe como estamos usando a lista de categorias passada na coleção dinâmica ViewBag para gerar um dropdownlist (combobox) de nomes de categoria amigáveis para ajudar a definir a propriedade CategoryID de nosso objeto Product. 

imagem

A combinação acima Controlador/Visão irá gerar então uma resposta HTML como a mostrada a seguir. 

imagem 

Melhorias para o Cacheamento de Saída

O sistema de cache de saída da ASP.NET MVC 3 não mais requer que você especifique uma propriedade VaryByParam ao declarar um atributo [OutputCache] em um método de ação do Controlador. A MVC3 agora varia automaticamente as entradas do cache de saída quando você tem parâmetros explícitos no seu método de ação - permitindo que você habilite de modo limpo o cache de saída em ações usando um código como o mostrado a seguir:

imagem

Além de suportar o cache de saída para a página inteira, a ASP.NET MVC 3 também suporta o cache de página parcial - o que te permite armazenar em cache uma região de saída e reusá-la em várias solicitações (requests) ou controladores. O comportamento de [OutputCache] para o cache de página parcial foi atualizado com a RC2, de forma que entradas no cache para sub-conteúdo sejam variadas com base em parâmetros de entrada, oposto à estrutura da URL da solicitação top-level (de mais alto nível) - o que torna os cenários de cache mais fáceis e mais poderosos do que o comportamento da RC anterior.

A declaração @model não adiciona espaço em branco

Em prévias anteriores, a declaração @model fortemente tipada no topo de uma visão do Razor adicionava uma linha em branco na saída HTML gerada. Isso foi corrigido para que a declaração não introduza espaços em branco.

Mudamos o Método "Html.ValidationMessage" para que este Exiba a Primeira Mensagem de Erro Útil

O comportamento do método de ajuda Html.ValidationMessage() foi atualizado para mostrar a primeira mensagem de erro útil ao invés de simplesmente mostrar o primeiro erro.

Durante a vinculação/ligação de dados no modelo, o dicionário ModelState pode ser preenchido a partir de múltiplas fontes com mensagens de erro sobre a propriedade, inclusive do próprio modelo (se ele implementar IValidatableObject), a partir de atributos de validação aplicados na propriedade, e de exceções lançadas enquanto a propriedade está sendo acessada.

Quando o método Html.ValidationMessage() exibe uma mensagem de validação, ele agora pula entradas do estado do modelo que incluem uma exceção, porque estas mensagens geralmente não são destinadas ao usuário final. Ao invés disso, o método procura a primeira mensagem de validação que não está associada a uma exceção e exibe essa mensagem. Se nenhuma mensagem for encontrada, o padrão é uma mensagem de erro genérica que está associada à primeira exceção.

RemoteAttribute "Fields" -> "AdditionalFields"

A ASP.NET MVC 3 tem suporte nativo para validação remota com sua infra-estrutura de validação. Isso significa que a biblioteca de script de validação no lado do cliente utilizada pela ASP.NET MVC 3 pode automaticamente fazer chamadas de volta (call-back) para os controladores que você expor no servidor para determinar se um elemento de entrada é realmente válido enquanto o usuário está editando o formulário (o que te permite fornecer atualizações de validação em tempo real).

Você pode fazer isso decorando uma propriedade do modelo/modelo de visão com um atributo [Remote] que especifica o controlador/ação que deve ser invocado/chamado para validá-la remotamente. Com a RC esse atributo tinha uma propriedade chamada "Fields" que podia ser usada para especificar elementos de entrada adicionais que deveriam ser enviados do cliente para o servidor para ajudar com a lógica de validação. Para melhorar a clareza do que essa propriedade faz, nós renomeamos a mesma para "AdditionalFields" com o lançamento da RC2.

Propriedades ViewResult.Model e ViewResult.ViewBag

A classe ViewResult agora expõe uma propriedade "Model" e uma propriedade "ViewBag" para fora dela. Isto torna mais fácil testar unitariamente os Controladores que retornam Visões, e evita que você tenha que acessar o modelo através da propriedade ViewResult.ViewData.Model.

Notas de Instalação

Você pode fazer o download e instalar a ASP.NET MVC 3 RC2 aqui. Ela pode ser instalada por cima da ASP.NET MVC 3 RC (ela deve apenas substituir os bits como parte de sua instalação).

Um componente que não será atualizado pela instalação acima (se você já tiver ele instalado) é o gerenciador de pacotes NuGet. Se você já tiver o NuGet instalado, por favor acesse o Gerenciador de Extensões do Visual Studio (por meio da opção do menu Tools->Extensions) e clique na guia "Updates" (Atualizações). Você deverá ver o NuGet listado lá - por favor clique no botão "Update" (Atualizar) próximo a ele para que o VS atualize a extensão para o lançamento de hoje.

Se você não tem o NuGet instalado (e não instalou a ASP.NET MVC 3 RC), então o NuGet será instalado como parte da instalação da ASP.NET MVC 3, e você não precisa tomar qualquer medida adicional para fazê-lo funcionar.

Resumo

Nós estamos realmente perto do lançamento final da ASP.NET MVC 3, e iremos entregar a versão final "RTM" dela no próximo mês. Passaram-se pouco mais de sete meses desde que a ASP.NET MVC 2 foi lançada, e estou muito impressionado com o grande número de novos recursos, melhorias e aperfeiçoamentos que a equipe foi capaz de adicionar nesta versão (Razor, JavaScript Não Intrusivo, NuGet, Injeção de Dependência, Cache de Saída, e muito, muito mais). Estarei escrevendo mais posts nas próximas semanas falando sobre muitos deles com mais profundidade.

Espero que ajude,

Scott

PS Além do blog, eu também estou agora utilizando o Twitter para atualizações rápidas e para compartilhar links. Siga-me em: twitter.com/ScottGu

 

Texto traduzido do post original por Leniel Macaferi.

No Comments