Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
(inclui atualização de ferramentas de abril de 2011)
ASP.NET MVC 3 é uma estrutura para criar aplicativos Web escalonáveis baseados em padrões usando padrões de design bem estabelecidos e o poder de 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 via NuGet
- Modelos de projeto habilitados para HTML 5
- Visõ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
Principais links
Novidades no ASP.NET MVC 3
- Phil Haack: ASP.NET MVC 3 lançado
- Scott Hanselman: ASP.NET MVC3, WebMatrix, NuGet, IIS Express e Orchard lançados - O Lançamento Web de Janeiro da Microsoft em Contexto
- Scott Guthrie: Anunciando o lançamento do ASP.NET MVC 3, IIS Express, SQL CE 4, Web Farm Framework, Orchard, WebMatrix
- Notas de versão para ASP.NET MVC 3
Instalação e ajuda
- Instalar ASP.NET MVC 3 usando o Instalador da Plataforma Web (recomendado)
- Instalar ASP.NET MVC 3 usando o instalador executável
- Instalar ASP.NET MVC 3 para Visual Studio 11 Developer Preview
- Leia a Introdução ao tutorial de ASP.NET MVC 3
- Obter ajuda e discutir ASP.NET MVC 3 nos fóruns
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 que estão incluídos nesta versão, organizados nas seguintes seções:
- Scaffolding extensível com integração do MvcScaffold
- Modelos de projeto habilitados para HTML 5
- O Razor View Engine
- Suporte para vários mecanismos de exibição
- Melhorias do controlador
- JavaScript e Ajax
- Aprimoramentos de validação de modelo
- Melhorias na injeção de dependência
- Outros novos recursos
Scaffolding extensível com integração do MvcScaffold
O novo sistema scaffolding torna mais fácil pegar e começar a usar de forma produtiva 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 básica do seu 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 de trabalho, 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 alguma nova tecnologia de complemento, como um mapeador objeto-relacional, um mecanismo de visualização, uma biblioteca de testes etc., é possível que o criador dessa tecnologia também tenha desenvolvido um pacote de scaffolding para ela.
- Se o trabalho envolver a criação repetida de classes ou arquivos semelhantes de algum tipo, porque você pode criar scaffolders personalizados que geram instalações 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 na MvcScaffolding incluem:
- Suporte para projetos C# e VB
- Suporte para os mecanismos de exibição Razor e ASPX
- Dá suporte ao scaffolding em áreas do ASP.NET MVC e ao uso de layouts e 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 quaisquer parâmetros personalizados que você lhes deu) aparecem automaticamente na lista de preenchimento de guias do console.
- Você pode obter pacotes NuGet que contêm scaffolders adicionais para diferentes tecnologias (por exemplo, há agora uma prova de conceito para LINQ para SQL) e combiná-los.
A Atualização de Ferramentas MVC 3 do ASP.NET inclui um ótimo suporte do Visual Studio para esse sistema de andaime, como:
- A caixa de diálogo Adicionar Controlador agora oferece suporte a scaffolding automático completo de ações do CRUD (Create, Read, Update e Delete) e visualizações correspondentes. Por padrão, isso estrutura o código de acesso a dados usando o Código EF Primeiro.
- A caixa de diálogo Adicionar Controlador oferece suporte a scaffolds extensíveis por meio de pacotes NuGet, como o MvcScaffolding. Isso permite conectar estruturas personalizadas no diálogo, o que permitiria criar estruturas para outras tecnologias de acesso a dados, como NHibernate ou até mesmo JET com ODBCDirect, se você estiver tão disposto!
Para obter mais informações sobre Scaffolding no ASP.NET MVC 3, consulte os seguintes recursos:
A série de postagens de Steve Sanderson, incluindo:
Postagem de Scott Hanselman de sua sessão do PDC 2010 construindo um blog com o Microsoft "Pacote de Amor na Web sem Nome"
Modelos de projeto HTML 5
A caixa de diálogo Novo Projeto inclui uma caixa de seleção para 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 é limpa e concisa, exigindo um número mínimo de toques no teclado.
- 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 a sintaxe razor.
- As views Razor podem ser testadas unitariamente sem exigir que você execute o aplicativo ou inicie um servidor web.
Alguns novos recursos do Razor incluem o seguinte:
-
@modelsintaxe 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.Rawmé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 adequadamente salgadas 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:
- Postagem no blog de Scott Guthrie apresentando Razor
- Scott Guthrie's blog post introducing the @model keyword
- Postagem de Scott Guthrie no blog apresentando layouts Razor
- Referência rápida da API razor
- Notas de versão do MVC 3
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 que você especifique o mecanismo de exibição padrão para um projeto. Você pode escolher o mecanismo de exibição do Web Forms (ASPX), Razor ou um mecanismo de exibição de software livre, como Spark, NHaml ou NDjango.
Melhorias do controlador
Filtros de Ações Globais
Às vezes, você deseja executar a lógica antes da execução de um método de ação ou após a execução de um método de ação. Para dar suporte a isso, o ASP.NET MVC 2 forneceu filtros de ação. 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 apenas obter ou definir propriedades e isso as resolverá 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 nomeada como ViewModel propriedade.)
Novos tipos de "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 de status HTTP 302) ou um redirecionamento permanente (código de status HTTP 301), 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,RedirectToRoutePermanenteRedirectToActionPermanent. Esses métodos retornam uma instância deRedirectResultcom a propriedadePermanentdefinida comotrue. - HttpStatusCodeResult. Retorna um código de status HTTP 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 invasivo evita injetar JavaScript em linha no 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 não intrusivo usando uma configuração de arquivo web.config. Para obter mais informações sobre melhorias do JavaScript e do Ajax, consulte os seguintes recursos:
- Introdução básica ao JavaScript discreto no site da Wikipédia
- Post de JavaScript não intrusivo de Brad Wilson
- Postagem de validação não intrusiva de JavaScript de Brad Wilson
- Criando um aplicativo MVC 3 com Razor e JavaScript discreto (tutorial no site ASP.NET)
- Notas de versão do MVC 3
Validação de Client-Side habilitada por padrão
Em versões anteriores do MVC, você precisa chamar explicitamente o método Html.EnableClientValidation a partir de uma view 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 apropriadas jQuery e jQuery Validation 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 de Validação jQuery. 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 nomeada 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 à vinculaçã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 o associem-no 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 do blog MVC 3 Preview de Scott Guthrie.
Aprimoramentos 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 modelos 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 a 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 (registro e injeção de fábricas de controladores, injeção de 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).
- Vinculadores de modelo (registro e injeção)
- Provedores de validação de modelos (registro e injeção).
- Provedores de metadados de modelo (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 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 os desenvolvedores que mantêm projetos de software livre (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 obter mais informações sobre o NuGet, consulte a documentação do NuGet.
Cache de Saída Parcial de Página
ASP.NET MVC oferece suporte a 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 Parcial da Página da postagem no blog de Scott Guthrie sobre a versão candidata do MVC 3 e a seção Cache de Saída da Ação Filho das Notas da 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 a proteger automaticamente 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 postem 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 a validação de solicitação, consulte os seguintes recursos:
- A seção Unobtrusive JavaScript and Validation na postagem no blog de Scott Guthrie sobre o candidato à versão do MVC 3.
- Notas de versão do MVC 3
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 da estrutura de modelo
Os modelos de scaffolding do ASP.NET MVC 3 fazem um trabalho melhor ao identificar propriedades de chave primária em modelos e tratá-las adequadamente do que as versões anteriores do MVC. (Por exemplo, os modelos de scaffolding agora garantem que a chave primária não seja gerada automaticamente como um campo de formulário editável.)
Por padrão, os scaffolds de Criar e Editar agora usam o assistente Html.EditorFor em vez do assistente Html.TextBoxFor. Isso melhora o suporte para metadados no modelo na forma de atributos de anotação de dados quando a caixa de diálogo Adicionar Modo de Exibição gera uma exibição.
Novas sobrecargas para "Html.LabelFor" e "Html.LabelForModel"
Novas sobrecargas de método foram adicionadas para as LabelFor e LabelForModel métodos auxiliares. As novas sobrecargas permitem que você especifique ou substitua o texto do rótulo.
Suporte para Controller 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, em caso afirmativo, 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 do AccountController
O AccountController no modelo de 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.