Partilhar via


ASP.NET MVC 3

(inclui atualização de ferramentas de abril de 2011)

ASP.NET MVC 3 é uma estrutura para a criação de aplicativos Web escalonáveis baseados em padrões usando padrões de design bem estabelecidos e o poder da ASP.NET e do .NET Framework.

Ele instala lado a lado com ASP.NET MVC 2, então comece a usá-lo hoje!

Baixe o instalador aqui

Principais recursos

  • Sistema de scaffolding integrado extensível por meio do NuGet
  • Modelos de projeto habilitados para HTML 5
  • Exibições expressivas, incluindo o novo Mecanismo de Exibição razor
  • Ganchos poderosos com injeção de dependência e filtros de ação global
  • Suporte a JavaScript avançado com JavaScript discreto, validação jQuery e associação JSON
  • Leia a lista completa de recursos abaixo

Novidades no ASP.NET MVC 3

Instalação e ajuda

Visão geral do ASP.NET MVC 3

ASP.NET MVC 3 se baseia em ASP.NET MVC 1 e 2, adicionando ótimos recursos que simplificam seu código e permitem extensibilidade mais profunda. Este tópico fornece uma visão geral de muitos dos novos recursos incluídos nesta versão, organizados nas seguintes seções:

Scaffolding extensível com integração do MvcScaffold

O novo sistema scaffolding facilita a captação e o uso produtivo se você for totalmente novo na estrutura e automatizar tarefas comuns de desenvolvimento se você tiver experiência e já souber o que está fazendo.

Isso é compatível com o novo pacote de scaffolding do NuGet chamado MvcScaffolding. O termo "Scaffolding" é usado por muitas tecnologias de software para significar "gerar rapidamente uma estrutura de tópicos básica do software que você pode editar e personalizar". O pacote de scaffolding que estamos criando para ASP.NET MVC é muito benéfico em vários cenários:

  • Se você estiver aprendendo ASP.NET MVC pela primeira vez, porque ele oferece uma maneira rápida de obter algum código útil e funcional, que você pode editar e adaptar de acordo com suas necessidades. Ele salva você do trauma de olhar para uma página em branco e não ter idéia de por onde começar!
  • Se você conhece bem ASP.NET MVC e agora está explorando uma nova tecnologia de complemento , como um mapeador relacional de objeto, um mecanismo de exibição, uma biblioteca de testes etc., porque o criador dessa tecnologia também pode ter criado um pacote de scaffolding para ele.
  • Se o trabalho envolver a criação repetida de classes ou arquivos semelhantes de algum tipo, porque você pode criar scaffolders personalizados que geram acessórios de teste, scripts de implantação ou qualquer outra coisa que você precise. Todos em sua equipe também podem usar suas scaffolders personalizadas.

Outros recursos no MvcScaffolding incluem:

  • Suporte para projetos C# e VB
  • Suporte para os mecanismos de exibição Razor e ASPX
  • Dá suporte ao scaffolding em áreas ASP.NET MVC e ao usar layouts/mestres de exibição personalizados
  • Você pode personalizar facilmente a saída editando modelos T4
  • Você pode adicionar scaffolders totalmente novos usando a lógica personalizada do PowerShell e modelos T4 personalizados. Esses (e todos os parâmetros personalizados que você lhes deu) aparecem automaticamente na lista de conclusão da guia do console.
  • Você pode obter pacotes NuGet contendo scaffolders adicionais para diferentes tecnologias (por exemplo, há uma prova de conceito para LINQ to SQL agora) e misturar e combiná-los juntos

A ASP.NET Atualização de Ferramentas do MVC 3 inclui um ótimo suporte do Visual Studio para esse sistema de scaffolding, como:

  • A caixa de diálogo Adicionar Controlador agora dá suporte a scaffolding automático completo de ações do controlador Criar, Ler, Atualizar e Excluir e exibições correspondentes. Por padrão, esse scaffolds código de acesso a dados usando o Código EF Primeiro.
  • A caixa de diálogo Adicionar Controlador dá suporte a scaffolds extensíveis por meio de pacotes NuGet, como MvcScaffolding. Isso permite conectar scaffolds personalizados à caixa de diálogo, o que permitiria criar scaffolds para outras tecnologias de acesso a dados, como NHibernate ou até mesmo JET com ODBCDirect, se você estiver tão inclinado!

Para obter mais informações sobre o Scaffolding no ASP.NET MVC 3, consulte os seguintes recursos:

Modelos de projeto HTML 5

A caixa de diálogo Novo Projeto inclui uma caixa de seleção habilitar versões HTML 5 de modelos de projeto. Esses modelos aproveitam o Modernizr 1.7 para fornecer suporte de compatibilidade para HTML 5 e CSS 3 em navegadores de nível inferior.

O Mecanismo de Exibição razor

ASP.NET MVC 3 vem com um novo mecanismo de exibição chamado Razor que oferece os seguintes benefícios:

  • A sintaxe Razor é limpo e concisa, exigindo um número mínimo de pressionamentos de tecla.
  • O Razor é fácil de aprender, em parte porque é baseado em linguagens existentes como C# e Visual Basic.
  • O Visual Studio inclui o IntelliSense e a colorização de código para sintaxe razor.
  • As exibições do Razor podem ser testadas por unidade sem exigir que você execute o aplicativo ou inicie um servidor Web.

Alguns novos recursos do Razor incluem o seguinte:

  • @model sintaxe para especificar o tipo que está sendo passado para a exibição.
  • @* *@ sintaxe de comentário.
  • A capacidade de especificar padrões (como layoutpage) uma vez para um site inteiro.
  • O Html.Raw método para exibir texto sem codificar HTML.
  • Suporte para compartilhar código entre várias exibições (arquivos _viewstart.cshtml ou _viewstart.vbhtml ).

O Razor também inclui novos auxiliares HTML, como o seguinte:

  • Chart. Renderiza um gráfico, oferecendo os mesmos recursos que o controle de gráfico no ASP.NET 4.
  • WebGrid. Renderiza uma grade de dados, completa com a funcionalidade de paginação e classificação.
  • Crypto. Usa algoritmos de hash para criar senhas corretamente saltadas e com hash.
  • WebImage. Renderiza uma imagem.
  • WebMail. Envia uma mensagem de email.

Para obter mais informações sobre o Razor, consulte os seguintes recursos:

Suporte para vários mecanismos de exibição

A caixa de diálogo Adicionar Exibição no ASP.NET MVC 3 permite que você escolha o mecanismo de exibição com o qual deseja trabalhar e a caixa de diálogo Novo Projeto permite especificar o mecanismo de exibição padrão para um projeto. Você pode escolher o mecanismo de exibição Web Forms (ASPX), Razor ou um mecanismo de exibição de software livre, como Spark, NHaml ou NDjango.

Melhorias do controlador

Filtros de ação global

Às vezes, você deseja executar a lógica antes que um método de ação seja executado ou depois que um método de ação for executado. Para dar suporte a isso, ASP.NET filtros de ação fornecidos pelo MVC 2. Os filtros de ação são atributos personalizados que fornecem um meio declarativo para adicionar comportamento de pré-ação e pós-ação a métodos de ação de controlador específicos. No entanto, em alguns casos, talvez você queira especificar o comportamento de pré-ação ou pós-ação que se aplica a todos os métodos de ação. O MVC 3 permite especificar filtros globais adicionando-os GlobalFilters à coleção. Para obter mais informações sobre filtros de ação globais, consulte os seguintes recursos:

Nova propriedade "ViewBag"

Os controladores MVC 2 dão suporte a uma ViewData propriedade que permite passar dados para um modelo de exibição usando uma API de dicionário com limite tardio. No MVC 3, você também pode usar uma sintaxe um pouco mais simples com a ViewBag propriedade para realizar a mesma finalidade. Por exemplo, em vez de escrever ViewData["Message"]="text", você pode escrever ViewBag.Message="text". Você não precisa definir nenhuma classe fortemente tipada para usar a ViewBag propriedade . Como é uma propriedade dinâmica, você pode obter ou definir propriedades e elas serão resolve dinamicamente em tempo de execução. Internamente, ViewBag as propriedades são armazenadas como pares nome/valor no ViewData dicionário. (Observação: na maioria das versões de pré-lançamento do MVC 3, a ViewBag propriedade foi chamada de ViewModel propriedade .)

Novos tipos "ActionResult"

Os seguintes ActionResult tipos e métodos auxiliares correspondentes são novos ou aprimorados no MVC 3:

  • HttpNotFoundResult. Retorna um código de status HTTP 404 para o cliente.
  • RedirectResult. Retorna um redirecionamento temporário (código http 302 status) ou um redirecionamento permanente (código http 301 status), dependendo de um parâmetro booliano. Em conjunto com essa alteração, a classe Controller agora tem três métodos para executar redirecionamentos permanentes: RedirectPermanent, RedirectToRoutePermanente RedirectToActionPermanent. Esses métodos retornam uma instância de RedirectResult com a Permanent propriedade definida truecomo .
  • HttpStatusCodeResult. Retorna um código http status especificado pelo usuário.

Aprimoramentos do JavaScript e do Ajax

Por padrão, o Ajax e os auxiliares de validação no MVC 3 usam uma abordagem JavaScript discreta. JavaScript não discreto evita injetar JavaScript embutido em HTML. Isso torna seu HTML menor e menos desordenado e facilita a troca ou personalização de bibliotecas JavaScript. Os auxiliares de validação no MVC 3 também usam o jQueryValidate plug-in por padrão. Se você quiser o comportamento do MVC 2, poderá desabilitar o JavaScript discreto usando uma configuração de arquivoweb.config . Para obter mais informações sobre melhorias do JavaScript e do Ajax, consulte os seguintes recursos:

validação de Client-Side habilitada por padrão

Em versões anteriores do MVC, você precisa chamar explicitamente o Html.EnableClientValidation método de uma exibição para habilitar a validação do lado do cliente. No MVC 3, isso não é mais necessário porque a validação do lado do cliente está habilitada por padrão. (Você pode desabilitar isso usando uma configuração no arquivo web.config .)

Para que a validação do lado do cliente funcione, você ainda precisa referenciar as bibliotecas de validação jQuery e jQuery apropriadas em seu site. Você pode hospedar essas bibliotecas em seu próprio servidor ou referenciá-las de uma CDN (rede de distribuição de conteúdo), como as CDNs da Microsoft ou do Google.

Validador Remoto

ASP.NET MVC 3 dá suporte à nova classe RemoteAttribute que permite que você aproveite o suporte do validador remoto do plug-in jQuery Validation. Isso permite que a biblioteca de validação do lado do cliente chame automaticamente um método personalizado que você define no servidor para executar a lógica de validação que só pode ser feita no lado do servidor.

No exemplo a seguir, o Remote atributo especifica que a validação do cliente chamará uma ação chamada UserNameAvailable na UsersController classe para validar o UserName campo.

public class User 
{
    [Remote("UserNameAvailable", "Users")]
    public string UserName { get; set; }
}

O exemplo a seguir mostra o controlador correspondente.

public class UsersController 
{ 
    public bool UserNameAvailable(string username) 
    { 
        if(MyRepository.UserNameExists(username)) 
        { 
            return "false"; 
        } 
        return "true"; 
    } 
}

Para obter mais informações sobre como usar o Remote atributo, consulte Como implementar a validação remota em ASP.NET MVC na biblioteca MSDN.

Suporte à associação JSON

ASP.NET MVC 3 inclui suporte interno à associação JSON que permite que os métodos de ação recebam dados codificados em JSON e os associe-os a parâmetros de método de ação. Essa funcionalidade é útil em cenários que envolvem modelos de cliente e associação de dados. (Os modelos de cliente permitem formatar e exibir um único item de dados ou um conjunto de itens de dados usando modelos que são executados no cliente.) O MVC 3 permite que você conecte facilmente modelos de cliente com métodos de ação no servidor que enviam e recebem dados JSON. Para obter mais informações sobre o suporte à associação JSON, consulte a seção Aprimoramentos javaScript e AJAX da postagem de blog MVC 3 Preview de Scott Guthrie.

Melhorias de validação de modelo

Atributos de metadados "DataAnnotations"

ASP.NET MVC 3 dá suporte a atributos DataAnnotations de metadados, como DisplayAttribute.

Classe "ValidationAttribute"

A ValidationAttribute classe foi aprimorada no .NET Framework 4 para dar suporte a uma nova IsValid sobrecarga que fornece mais informações sobre o contexto de validação atual, como qual objeto está sendo validado. Isso permite cenários mais avançados em que você pode validar o valor atual com base em outra propriedade do modelo. Por exemplo, o novo CompareAttribute atributo permite comparar os valores de duas propriedades de um modelo. No exemplo a seguir, a ComparePassword propriedade deve corresponder ao Password campo para ser válida.

public class User
{ 
    [Required]
    public string Password { get; set; } 
    [Required, Compare("Password")] 
    public string ComparePassword { get; set; } 
}

Interfaces de validação

A interface IValidatableObject permite que você execute a validação no nível do modelo e permite que você forneça mensagens de erro de validação específicas para o estado do modelo geral ou entre duas propriedades dentro do modelo. O MVC 3 agora recupera erros da IValidatableObject interface ao associar o modelo e sinaliza ou realça automaticamente os campos afetados em uma exibição usando os auxiliares de formulário HTML internos.

A interface IClientValidatable permite que ASP.NET MVC descubra em tempo de execução se um validador tem suporte para validação do cliente. Essa interface foi projetada para que possa ser integrada a uma variedade de estruturas de validação.

Para obter mais informações sobre interfaces de validação, consulte a seção Melhorias de validação de modelo da postagem do blog MVC 3 Preview de Scott Guthrie. (No entanto, observe que a referência a "IValidateObject" no blog deve ser "IValidatableObject".)

Melhorias na injeção de dependência

ASP.NET MVC 3 oferece melhor suporte para a aplicação da DI (Injeção de Dependência) e para integração com contêineres de Injeção de Dependência ou Inversão de Controle (IOC). O suporte para DI foi adicionado nas seguintes áreas:

  • Controladores (registrando e injetando fábricas de controladores, injetando controladores).
  • Exibições (registrando e injetando mecanismos de exibição, injetando dependências em páginas de exibição).
  • Filtros de ação (localizando e injetando filtros).
  • Associadores de modelo (registro e injeção).
  • Provedores de validação de modelo (registro e injeção).
  • Modelo de provedores de metadados (registro e injeção).
  • Provedores de valor (registro e injeção).

O MVC 3 dá suporte à biblioteca do Common Service Locator e a qualquer contêiner de DI que dê suporte à interface dessa IServiceLocator biblioteca. Ele também dá suporte a uma nova IDependencyResolver interface que facilita a integração de estruturas de DI.

Para obter mais informações sobre DI no MVC 3, consulte os seguintes recursos:

Outros novos recursos

Integração do NuGet

ASP.NET MVC 3 instala e habilita automaticamente o NuGet como parte de sua instalação. O NuGet é um gerenciador de pacotes de software livre gratuito que facilita a localização, a instalação e o uso de bibliotecas e ferramentas do .NET em seus projetos. Ele funciona com todos os tipos de projeto do Visual Studio (incluindo ASP.NET Web Forms e ASP.NET MVC).

O NuGet permite que desenvolvedores que mantêm projetos código aberto (por exemplo, projetos como Moq, NHibernate, Ninject, StructureMap, NUnit, Windsor, RhinoMocks e Elmah) empacotem suas bibliotecas e registrem-nas em uma galeria online. Em seguida, é fácil para os desenvolvedores do .NET que desejam usar uma dessas bibliotecas para encontrar o pacote e instalá-lo em projetos em que estão trabalhando.

Com o ASP.NET 3 Tools Update, os modelos de projeto incluem bibliotecas JavaScript pré-instaladas pacotes NuGet, portanto, eles são atualizáveis por meio do NuGet. O Entity Framework Code First também é pré-instalado como um pacote NuGet.

Para saber mais sobre o NuGet, veja a documentação do NuGet.

cache de saída Partial-Page

ASP.NET MVC tem suporte para cache de saída de respostas de página inteira desde a versão 1. O MVC 3 também dá suporte ao cache de saída de página parcial, o que permite armazenar facilmente em cache regiões ou fragmentos de uma resposta. Para obter mais informações sobre cache, consulte a seção Cache de Saída de Página Parcialda postagem no blog de Scott Guthrie sobre o candidato à versão do MVC 3 e a seção Cache de Saída de Ação Filho das Notas de Versão do MVC 3.

Controle granular sobre validação de solicitação

ASP.NET MVC tem validação de solicitação interna que ajuda automaticamente a proteger contra ataques de injeção de XSS e HTML. No entanto, às vezes, você deseja desabilitar explicitamente a validação de solicitação, como se você quiser permitir que os usuários publiquem conteúdo HTML (por exemplo, em entradas de blog ou conteúdo CMS). Agora você pode adicionar um atributo AllowHtml a modelos ou modelos de exibição para desabilitar a validação de solicitação por propriedade durante a associação de modelo. Para obter mais informações sobre validação de solicitação, consulte os seguintes recursos:

Caixa de diálogo Extensível "Novo Projeto"

No ASP.NET MVC 3, você pode adicionar modelos de projeto, mecanismos de exibição e estruturas de projeto de teste de unidade à caixa de diálogo Novo Projeto .

Aprimoramentos de scaffolding de modelo

ASP.NET modelos de scaffolding do MVC 3 fazem um trabalho melhor de identificar propriedades de chave primária em modelos e lidar com elas adequadamente do que em versões anteriores do MVC. (Por exemplo, os modelos de scaffolding agora garantem que a chave primária não seja scaffolded como um campo de formulário editável.)

Por padrão, os scaffolds Criar e Editar agora usam o Html.EditorFor auxiliar em vez do Html.TextBoxFor auxiliar. Isso melhora o suporte para metadados no modelo na forma de atributos de anotação de dados quando a caixa de diálogo Adicionar Exibição gera uma exibição.

Novas sobrecargas para "Html.LabelFor" e "Html.LabelForModel"

Novas sobrecargas de método foram adicionadas para os LabelFor métodos auxiliares e LabelForModel . As novas sobrecargas permitem especificar ou substituir o texto do rótulo.

Suporte ao controlador sem sessão

No ASP.NET MVC 3, você pode indicar se deseja que uma classe de controlador use o estado da sessão e, nesse caso, se o estado da sessão deve ser leitura/gravação ou somente leitura. Para obter mais informações sobre o suporte ao controlador sem sessão, consulte Notas sobre a versão do MVC 3.

Nova classe "AdditionalMetadataAttribute"

Você pode usar o atributo AdditionalMetadata para preencher o ModelMetadata.AdditionalValues dicionário de uma propriedade de modelo. Por exemplo, se um modelo de exibição tiver uma propriedade que deve ser exibida apenas para um administrador, você poderá anotar essa propriedade, conforme mostrado no exemplo a seguir:

public class ProductViewModel 
{
    [AdditionalMetadata("AdminOnly", true)]
    public string RefundCode {get; set;}
}

Esses metadados são disponibilizados para qualquer modelo de exibição ou editor quando um modelo de exibição de produto é renderizado. Cabe a você interpretar as informações de metadados.

Melhorias de AccountController

O modelo AccountController no projeto da Internet foi muito aprimorado.

Novo modelo de projeto da Intranet

Um novo Modelo de Projeto da Intranet está incluído, que habilita a Autenticação do Windows e remove o AccountController.