Comparteix a través de


ASP.NET MVC 3

(incluye la actualización de herramientas de abril de 2011)

ASP.NET MVC 3 es un marco para crear aplicaciones web escalables basadas en estándares con patrones de diseño bien establecidos y la eficacia de ASP.NET y .NET Framework.

Se instala en paralelo con ASP.NET MVC 2, así que empiece a usarlo hoy mismo.

Descargar el instalador aquí

Características principales

  • Sistema de Scaffolding integrado extensible mediante NuGet
  • Plantillas de proyecto habilitadas para HTML 5
  • Vistas expresivas, incluido el nuevo motor de vistas de Razor
  • Enlaces eficaces con inserción de dependencias y filtros de acción global
  • Compatibilidad enriquecida de JavaScript con JavaScript no intrusivo, validación de jQuery y enlace JSON
  • Lea la lista completa de características a continuación.

Novedades de ASP.NET MVC 3

Instalación y ayuda

Información general de ASP.NET MVC 3

ASP.NET MVC 3 se basa en ASP.NET MVC 1 y 2, agregando características excelentes que simplifican el código y permiten una extensibilidad más profunda. En este tema se proporciona información general sobre muchas de las nuevas características que se incluyen en esta versión, organizadas en las secciones siguientes:

Andamiaje extensible con integración de MvcScaffold

El nuevo sistema de andamiaje hace que sea más fácil empezar a usarlo productivamente si eres completamente nuevo en el framework, y para automatizar las tareas comunes de desarrollo si ya tienes experiencia y sabes lo que haces.

Esto es compatible con el nuevo paquete de scaffolding de NuGet denominado MvcScaffolding. El término "Scaffolding", comúnmente utilizado en tecnologías de software, se refiere a "generar rápidamente un esquema básico del software que luego puede editar y personalizar". El paquete de scaffolding que estamos creando para ASP.NET MVC es muy beneficioso en varios escenarios:

  • Si está aprendiendo ASP.NET MVC por primera vez, ya que le ofrece una manera rápida de obtener código útil y de trabajo, que puede editar y adaptar según sus necesidades. Te ahorra del trauma de mirar una página en blanco y no tener idea de dónde empezar!
  • Si conoce bien ASP.NET MVC y ahora está explorando algunas nuevas tecnologías complementarias, como un asignador relacional de objetos, un motor de vistas, una biblioteca de pruebas, etc., es posible que el creador de esa tecnología también haya creado un paquete de scaffolding para ella.
  • Si su trabajo implica crear repetidamente clases o archivos similares de algún tipo, puede crear scaffolders personalizados que generen fixtures de prueba, scripts de implementación o cualquier otra cosa que necesite. Todos los usuarios de su equipo también pueden usar sus scaffolders personalizados.

Otras características de MvcScaffolding incluyen:

  • Compatibilidad con proyectos de C# y VB
  • Compatibilidad con los motores de vista Razor y ASPX
  • Admite scaffolding en áreas de ASP.NET MVC y el uso de diseños o patrones de vista personalizados
  • Puede personalizar fácilmente la salida editando plantillas de T4.
  • Puede agregar scaffolders completamente nuevos mediante la lógica de PowerShell personalizada y las plantillas de T4 personalizadas. Estos parámetros (y los parámetros personalizados que haya proporcionado) aparecen automáticamente en la lista de finalización de pestañas de la consola.
  • Puede obtener paquetes NuGet que contengan scaffolders adicionales para diferentes tecnologías (por ejemplo, hay una prueba de concepto para LINQ to SQL ahora) y combinarlos según sus necesidades.

La actualización de herramientas de MVC 3 de ASP.NET incluye una excelente compatibilidad con Visual Studio para este sistema de scaffolding, como:

  • El cuadro de diálogo Agregar controlador ahora admite el scaffolding automático completo de las acciones de controlador para crear, leer, actualizar y eliminar, así como sus vistas correspondientes. De forma predeterminada, este código de acceso a datos scaffolding usa EF Code First.
  • Add Controller Dialog admite scaffolds extensibles a través de paquetes NuGet como MvcScaffolding. Esto permite conectar scaffolds personalizados al diálogo, lo que le permitiría crear andamios para otras tecnologías de acceso a datos, como NHibernate o incluso JET con ODBCDirect si lo desea.

Para obtener más información sobre scaffolding en ASP.NET MVC 3, consulte los siguientes recursos:

Plantillas de proyecto HTML 5

El cuadro de diálogo Nuevo proyecto incluye una casilla habilitar las versiones HTML 5 de las plantillas de proyecto. Estas plantillas aprovechan Modernizr 1.7 para proporcionar compatibilidad con HTML 5 y CSS 3 en exploradores de nivel descendente.

Motor de vista de Razor

ASP.NET MVC 3 incluye un nuevo motor de vista denominado Razor que ofrece las siguientes ventajas:

  • La sintaxis de Razor es limpia y concisa, lo que requiere un número mínimo de pulsaciones de tecla.
  • Razor es fácil de aprender, en parte porque se basa en lenguajes existentes como C# y Visual Basic.
  • Visual Studio incluye IntelliSense y coloración de código para la sintaxis de Razor.
  • Las vistas de Razor se pueden probar de forma unitaria sin necesidad de ejecutar la aplicación o iniciar un servidor web.

Algunas nuevas características de Razor incluyen lo siguiente:

  • @model sintaxis para especificar el tipo que se pasa a la vista.
  • @* *@ sintaxis de comentario.
  • La capacidad de especificar valores predeterminados (como layoutpage) una vez para todo un sitio.
  • Método Html.Raw para mostrar texto sin codificación HTML.
  • Compatibilidad con el uso compartido de código entre varias vistas (archivos _viewstart.cshtml o _viewstart.vbhtml ).

Razor también incluye nuevos asistentes HTML, como los siguientes:

  • Chart. Representa un gráfico, ofreciendo las mismas características que el control de gráfico en ASP.NET 4.
  • WebGrid. Representa una cuadrícula de datos, completa con la funcionalidad de paginación y ordenación.
  • Crypto. Usa algoritmos de hash para generar contraseñas correctamente saladas y con hash.
  • WebImage. Representa una imagen.
  • WebMail. Envía un mensaje de correo electrónico.

Para obtener más información sobre Razor, consulte los siguientes recursos:

Compatibilidad con varios motores de vista

El cuadro de diálogo Agregar vista de ASP.NET MVC 3 le permite elegir el motor de vistas con el que desea trabajar y el cuadro de diálogo Nuevo proyecto le permite especificar el motor de vista predeterminado para un proyecto. Puede elegir el motor de vistas de Formularios Web Forms (ASPX), Razor o un motor de vistas de código abierto, como Spark, NHaml o NDjango.

Mejoras en el controlador

Filtros de acción globales

A veces quiere aplicar lógica antes o después de que se ejecute un método de acción. Para admitir esto, ASP.NET MVC 2 proporcionó filtros de acción. Los filtros de acción son atributos personalizados que proporcionan un medio declarativo para agregar comportamientos previos y posteriores a la acción a métodos de acción de controlador específicos. Sin embargo, en algunos casos es posible que desee especificar el comportamiento anterior o posterior a la acción que se aplica a todos los métodos de acción. MVC 3 permite especificar filtros globales agregándolos a la GlobalFilters colección. Para obtener más información sobre los filtros de acciones globales, consulte los siguientes recursos:

Nueva propiedad "ViewBag"

Los controladores de MVC 2 admiten una ViewData propiedad que permite pasar datos a una plantilla de vista mediante una API de diccionario de enlace tardío. En MVC 3, también puede usar una sintaxis algo más sencilla con la ViewBag propiedad para lograr el mismo propósito. Por ejemplo, en lugar de escribir ViewData["Message"]="text", puede escribir ViewBag.Message="text". No es necesario definir ninguna clase fuertemente tipada para usar la propiedad ViewBag. Dado que es una propiedad dinámica, solo puede obtener o establecer propiedades y las resolverá dinámicamente en tiempo de ejecución. Internamente, las propiedades ViewBag se almacenan como pares nombre-valor en el diccionario ViewData. (Nota: en la mayoría de las versiones preliminares de MVC 3, la ViewBag propiedad se denominaba propiedad ViewModel ).

Nuevos tipos «ActionResult»

Los siguientes ActionResult tipos y los métodos auxiliares correspondientes son nuevos o mejorados en MVC 3:

  • HttpNotFoundResult. Devuelve un código de estado HTTP 404 al cliente.
  • RedirectResult. Devuelve un redireccionamiento temporal (código de estado HTTP 302) o una redirección permanente (código de estado HTTP 301), en función de un parámetro booleano. Junto con este cambio, la clase Controller ahora tiene tres métodos para realizar redireccionamientos permanentes: RedirectPermanent, RedirectToRoutePermanenty RedirectToActionPermanent. Estos métodos devuelven una instancia de RedirectResult con la propiedad Permanent establecida en true.
  • HttpStatusCodeResult. Devuelve un código de estado HTTP especificado por el usuario.

Mejoras de JavaScript y Ajax

De forma predeterminada, los asistentes de validación y Ajax en MVC 3 usan un enfoque de JavaScript discreto. Unobtrusive JavaScript evita insertar JavaScript en línea en HTML. Esto hace que el CÓDIGO HTML sea más pequeño y menos desordenado y facilita el intercambio o la personalización de las bibliotecas de JavaScript. Los asistentes de validación de MVC 3 también usan el jQueryValidate complemento de forma predeterminada. Si desea el comportamiento de MVC 2, puede deshabilitar JavaScript no intrusivo mediante un ajuste en el archivo web.config. Para obtener más información sobre las mejoras de JavaScript y Ajax, consulte los siguientes recursos:

Validación del lado del cliente habilitada de forma predeterminada

En versiones anteriores de MVC, debe llamar explícitamente al método Html.EnableClientValidation desde la vista para habilitar la validación del lado cliente. En MVC 3, ya no es necesario porque la validación del lado cliente está habilitada de forma predeterminada. (Puede deshabilitarlo mediante una configuración en el archivo web.config ).

Para que la validación del lado cliente funcione, aún debe referenciar las bibliotecas de jQuery y de validación de jQuery adecuadas en el sitio. Puede hospedar esas bibliotecas en su propio servidor o hacer referencia a ellas desde una red de entrega de contenido (CDN) como las redes CDN de Microsoft o Google.

Validador remoto

ASP.NET MVC 3 admite la nueva clase RemoteAttribute que permite aprovechar la compatibilidad con el validador remoto del complemento de validación de jQuery. Esto permite que la biblioteca de validación del lado cliente llame automáticamente a un método personalizado que defina en el servidor para realizar la lógica de validación que solo se puede realizar en el lado servidor.

En el ejemplo siguiente, el atributo especifica que la Remote validación del cliente llamará a una acción denominada UserNameAvailable en la UsersController clase para validar el UserName campo.

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

En el ejemplo siguiente se muestra el controlador correspondiente.

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

Para obtener más información sobre cómo usar el Remote atributo , vea How to: Implement Remote Validation in ASP.NET MVC in the MSDN library.

Compatibilidad con enlaces JSON

ASP.NET MVC 3 incluye compatibilidad integrada con enlaces JSON que permite a los métodos de acción recibir datos codificados en JSON y enlazarlos a parámetros de método de acción. Esta funcionalidad es útil en escenarios que implican plantillas de cliente y enlace de datos. (Las plantillas de cliente permiten dar formato y mostrar un único elemento de datos o un conjunto de elementos de datos mediante plantillas que se ejecutan en el cliente). MVC 3 permite conectar fácilmente plantillas de cliente con métodos de acción en el servidor que envían y reciben datos JSON. Para obtener más información sobre la compatibilidad con enlaces JSON, consulte la sección Mejoras de JavaScript y AJAX de la entrada de blog MVC 3 Preview de Scott Guthrie.

Mejoras en la validación de modelos

Atributos de metadatos de "DataAnnotations"

ASP.NET MVC 3 admite DataAnnotations atributos de metadatos como DisplayAttribute.

Clase "ValidationAttribute"

La ValidationAttribute clase se ha mejorado en .NET Framework 4 para admitir una nueva IsValid sobrecarga que proporciona más información sobre el contexto de validación actual, como qué objeto se está validando. Esto permite escenarios más enriquecidos en los que puede validar el valor actual en función de otra propiedad del modelo. Por ejemplo, el nuevo CompareAttribute atributo permite comparar los valores de dos propiedades de un modelo. En el ejemplo siguiente, la ComparePassword propiedad debe coincidir con el Password campo para poder ser válido.

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

Interfaces de validación

La interfaz IValidatableObject permite realizar la validación de nivel de modelo y permite proporcionar mensajes de error de validación específicos del estado del modelo general o entre dos propiedades dentro del modelo. MVC 3 ahora recupera errores de la IValidatableObject interfaz cuando se enlaza el modelo y marca o resalta automáticamente los campos afectados dentro de una vista mediante los asistentes de formulario HTML integrados.

La interfaz IClientValidatable permite que ASP.NET MVC detecte en tiempo de ejecución si un validador admite la validación de cliente. Esta interfaz se ha diseñado para que se pueda integrar con una variedad de marcos de validación.

Para obtener más información sobre las interfaces de validación, consulte la sección Mejoras de validación de modelos de la entrada de blog MVC 3 Preview de Scott Guthrie. (Sin embargo, tenga en cuenta que la referencia a "IValidateObject" en el blog debe ser "IValidatableObject".

Mejoras en la inserción de dependencias

ASP.NET MVC 3 proporciona una mejor compatibilidad con la aplicación de inserción de dependencias (DI) y para la integración con contenedores de inserción de dependencias o inversión de control (IOC). Se ha agregado compatibilidad con DI en las siguientes áreas:

  • Controladores (registrar e inyectar fábricas de controladores, inyectar controladores).
  • Vistas (registrar e insertar motores de vista, insertar dependencias en páginas de vista).
  • Filtros de acción (localizar e inyectar filtros).
  • Enlazadores de modelos (registro e inserción).
  • Proveedores de validación de modelos (registro e inserción).
  • Proveedores de metadatos de modelo (registro e inserción).
  • Proveedores de valores (registro e inserción).

MVC 3 admite la biblioteca Common Service Locator y cualquier contenedor de inyección de dependencias que admita esta interfaz de la IServiceLocator biblioteca. También admite una nueva IDependencyResolver interfaz que facilita la integración de marcos de inserción de dependencias.

Para obtener más información sobre la inserción de dependencias en MVC 3, consulte los siguientes recursos:

Otras características nuevas

Integración de NuGet

ASP.NET MVC 3 instala automáticamente y habilita NuGet como parte de su configuración. NuGet es un administrador de paquetes de código abierto gratuito que facilita la búsqueda, instalación y uso de bibliotecas y herramientas de .NET en los proyectos. Funciona con todos los tipos de proyecto de Visual Studio (incluidos ASP.NET Web Forms y ASP.NET MVC).

NuGet permite a los desarrolladores que mantienen proyectos de código abierto (por ejemplo, proyectos como Moq, NHibernate, Ninject, StructureMap, NUnit, Windsor, RhinoMocks y Elmah) para empaquetar sus bibliotecas y registrarlas en una galería en línea. Después, es fácil para los desarrolladores de .NET que quieren usar una de estas bibliotecas para encontrar el paquete e instalarlo en proyectos en los que están trabajando.

Con la actualización de herramientas de ASP.NET 3, las plantillas de proyecto incluyen bibliotecas de JavaScript preinstaladas paquetes NuGet, por lo que son actualizables a través de NuGet. Entity Framework Code First también está preinstalado como un paquete NuGet.

Para obtener más información sobre NuGet, consulte la documentación de NuGet.

almacenamiento en caché de salida de Partial-Page

ASP.NET MVC ha admitido el almacenamiento en caché de salida de respuestas de página completa desde la versión 1. MVC 3 también admite el almacenamiento en caché de salida de página parcial, lo que permite almacenar en caché fácilmente regiones o fragmentos de una respuesta. Para obtener más información sobre el almacenamiento en caché, consulte la sección de almacenamiento en caché de salida parcial de la página de la entrada de blog de Scott Guthrie sobre el candidato de lanzamiento de MVC 3 y la sección de almacenamiento en caché de salida de acción hija de las notas de la versión de MVC 3.

Control pormenorizado sobre la validación de solicitudes

ASP.NET MVC tiene validación de solicitudes integrada que ayuda automáticamente a protegerse frente a ataques de inyección XSS y HTML. Sin embargo, a veces desea deshabilitar explícitamente la validación de solicitudes, como si desea permitir que los usuarios publiquen contenido HTML (por ejemplo, en entradas de blog o contenido cmS). Ahora puede agregar un atributo AllowHtml a modelos o modelos de vista para deshabilitar la validación de solicitudes por propiedad durante el enlace de modelos. Para obtener más información sobre la validación de solicitudes, consulte los siguientes recursos:

Cuadro de diálogo "Nuevo proyecto" extensible

En ASP.NET MVC 3 puede agregar plantillas de proyecto, ver motores y marcos de proyecto de prueba unitaria al cuadro de diálogo Nuevo proyecto .

Mejoras en el andamiaje de plantillas

ASP.NET las plantillas de scaffolding de MVC 3 realizan un mejor trabajo para identificar las propiedades de clave principal en los modelos y controlarlas adecuadamente que en versiones anteriores de MVC. Por ejemplo, las plantillas de andamiaje ahora aseguran que la clave principal no se cree como un campo editable de formulario.

De forma predeterminada, los scaffolds Crear y Editar ahora usan el Html.EditorFor auxiliar en lugar del Html.TextBoxFor auxiliar. Esto mejora la compatibilidad con los metadatos del modelo en forma de atributos de anotación de datos cuando el cuadro de diálogo Agregar vista genera una vista.

Nuevas sobrecargas para "Html.LabelFor" y "Html.LabelForModel"

Se han agregado nuevas sobrecargas de método para los métodos de ayuda LabelFor y LabelForModel. Las nuevas sobrecargas permiten especificar o invalidar el texto de la etiqueta.

Compatibilidad con el controlador sin sesión

En ASP.NET MVC 3 puede indicar si desea que una clase de controlador use el estado de sesión y, si es así, si el estado de sesión debe ser de lectura y escritura o de solo lectura. Para obtener más información sobre la compatibilidad con controladores sin sesión, consulte las Notas de la versión de MVC 3.

Nueva clase "AdditionalMetadataAttribute"

Puede usar el atributo AdditionalMetadata para rellenar el ModelMetadata.AdditionalValues diccionario de una propiedad de modelo. Por ejemplo, si un modelo de vista tiene una propiedad que solo se debe mostrar a un administrador, puede anotar esa propiedad como se muestra en el ejemplo siguiente:

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

Estos metadatos están disponibles para cualquier plantilla de visualización o editor cuando se representa un modelo de vista de producto. Depende de usted interpretar la información de metadatos.

Mejoras de AccountController

Se ha mejorado considerablemente la plantilla de proyecto AccountController en Internet.

Nueva plantilla de proyecto de intranet

Se incluye una nueva plantilla de proyecto de intranet que habilita la autenticación de Windows y quita accountController.