Compartir vía


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.

Descargue el instalador aquí

Características principales

  • Sistema de scaffolding integrado extensible a través de 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
  • Leer la lista de características completa 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 excelentes características 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:

Scaffolding extensible con integración de MvcScaffold

El nuevo sistema de scaffolding facilita el aprendizaje y el uso productivo si es completamente nuevo en el marco, así como la automatización de tareas comunes de desarrollo si tiene experiencia y ya sabe lo que está haciendo.

Esto es compatible con el nuevo paquete de scaffolding de NuGet denominado MvcScaffolding. El término "Scaffolding" se usa en muchas tecnologías de software para significar "generar rápidamente un esquema básico del software que 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. Le ahorra el trauma de mirar una página en blanco y no tener idea de dónde empezar.
  • Si sabe ASP.NET MVC bien y ahora está explorando algunas nuevas tecnologías de complementos, como un asignador relacional de objetos, un motor de vistas, una biblioteca de pruebas, etc., porque es posible que el creador de esa tecnología también haya creado un paquete scaffolding para ella.
  • Si el trabajo implica crear repetidamente clases o archivos similares de algún tipo, ya que puede crear scaffolders personalizados que generen accesorios de prueba de salida, scripts de implementación o cualquier otra cosa que necesite. Todos los miembros del 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 ASP.NET áreas de 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, ahora hay una prueba de concepto uno para LINQ to SQL) y mezclarlos y combinarlos juntos.

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 scaffolding automático completo de acciones de controlador de Creación, Lectura, Actualización y Eliminación y las vistas correspondientes. De forma predeterminada, este código de acceso a datos de 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 cuadro de diálogo, lo que le permitiría crear scaffoldings para otras tecnologías de acceso a datos, como NHibernate o incluso JET con ODBCDirect si está tan inclinado.

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 para 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 vistas de Razor

ASP.NET MVC 3 incluye un nuevo motor de vistas 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 características nuevas de Razor incluyen lo siguiente:

  • Sintaxis @model para especificar el tipo que se pasa a la vista.
  • Sintaxis @* *@ de comentario.
  • La capacidad de especificar los valores predeterminados (como layoutpage) una vez para todo el sitio.
  • Método Html.Raw para mostrar texto sin codificarlo en 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, que ofrece 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 hash para crear contraseñas con sal y hash correctas.
  • 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 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 global

A veces se desea ejecutar la lógica antes o después de que se ejecute un método de acción. Para ello, ASP.NET MVC 2 proporciona 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 quiera 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 colección GlobalFilters. Para obtener más información sobre los filtros de acciones globales, consulte los siguientes recursos:

Nueva propiedad "ViewBag"

Los controladores MVC 2 admiten una propiedad ViewData que permite pasar datos a una plantilla de vista mediante una API de diccionario enlazada en tiempo de ejecución. En MVC 3, también puede usar una sintaxis algo más sencilla con la propiedad ViewBag 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 de ViewData. (Nota: en la mayoría de las versiones preliminares de MVC 3, la propiedad ViewBag se denominaba la propiedad ViewModel).

Nuevos tipos "ActionResult"

Los tipos ActionResult siguientes 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), según un parámetro booleano. Junto con este cambio, la clase Controller ahora tiene tres métodos para realizar redireccionamientos permanentes: RedirectPermanent, RedirectToRoutePermanent y 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 no intrusivo. El JavaScript no intrusivo evita inyectar JavaScript en línea en el HTML. Esto hace que el HTML sea más pequeño y menos desordenado y facilita el intercambio o la personalización de bibliotecas de JavaScript. Los asistentes de validación de MVC 3 también usan el complemento jQueryValidate de forma predeterminada. Si desea el comportamiento de MVC 2, puede deshabilitar el JavaScript no intrusivo mediante una configuración del archivo web.config. Para obtener más información sobre las mejoras de JavaScript y Ajax, consulte los siguientes recursos:

Validación del lado cliente habilitada de forma predeterminada

En versiones anteriores de MVC, debe llamar explícitamente al método Html.EnableClientValidation desde una 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 deshabilitarla mediante una configuración en el archivo web.config).

Para que la validación del lado cliente funcione, debe hacer referencia a las bibliotecas jQuery y jQuery Validation 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 le permite aprovechar la compatibilidad con el validador remoto del complemento jQuery Validation. 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 Remote especifica que la validación de cliente llamará a una acción denominada UserNameAvailable en la clase UsersController para validar el campo UserName.

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 atributo Remote, vea Cómo implementar la validación remota en ASP.NET MVC en la biblioteca de MSDN.

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 al modelo 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 sobre la Versión preliminar de MVC 3 de Scott Guthrie.

Mejoras en la validación de modelos

Atributos de metadatos "DataAnnotations"

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

Clase "ValidationAttribute"

La clase ValidationAttribute se ha mejorado en .NET Framework 4 para admitir una nueva sobrecarga de IsValid 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 atributo CompareAttribute permite comparar los valores de dos propiedades de un modelo. En el ejemplo siguiente, la propiedad ComparePassword debe coincidir con el campo Password para que sea 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 le 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 interfaz de IValidatableObject 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 a ASP.NET MVC detectar en tiempo de ejecución si un validador tiene compatibilidad con 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 sobre la Versión preliminar de MVC 3 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 la inserción de dependencias en las siguientes áreas:

  • Controladores (registrar e insertar fábricas de controladores, insertar controladores).
  • Vistas (registrar e insertar motores de vista, insertar dependencias en páginas de vista).
  • Filtros de acción (buscar e insertar 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 DI que admita la interfaz IServiceLocator de esa biblioteca. También admite una nueva interfaz de IDependencyResolver 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 y habilita automáticamente 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. De este modo, los desarrolladores de .NET que deseen utilizar una de estas bibliotecas podrán encontrar fácilmente el paquete e instalarlo en los 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 más información sobre NuGet, consulte la documentación correspondiente.

Almacenamiento en caché de salida de página parcial

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 le 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 Almacenamiento en caché de salida de página parcial de la Entrada de blog de Scott Guthrie sobre la Versión candidata para lanzamiento de MVC 3 y la sección Almacenamiento en caché de salida de acción secundaria 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 por inyección XSS y HTML. Sin embargo, a veces desea deshabilitar explícitamente la validación de solicitudes, por ejemplo, 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, motores de vista y marcos de proyecto de prueba unitaria al cuadro de diálogo Nuevo proyecto.

Mejoras en el scaffolding de plantillas

Las plantillas de scaffolding de ASP.NET MVC 3 realizan un mejor trabajo para identificar las propiedades de clave principal en los modelos y las controlan de forma más adecuada que en versiones anteriores de MVC. (Por ejemplo, las plantillas de scaffolding ahora se aseguran de que la clave principal no tenga scaffolding como campo de formulario editable).

De forma predeterminada, las scaffoldings Crear y Editar ahora usan el asistente de Html.EditorFor en lugar del asistente de Html.TextBoxFor. 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 auxiliares LabelFor y LabelForModel. Las nuevas sobrecargas permiten especificar o invalidar el texto de la etiqueta.

Compatibilidad con controladores 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, vea Notas de la versión de MVC 3.

Nueva clase "AdditionalMetadataAttribute"

Puede usar el atributo AdditionalMetadata para rellenar el diccionario de ModelMetadata.AdditionalValues 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. Es necesario que interprete la información de metadatos.

Mejoras de AccountController

La plantilla de proyecto AccountController en Internet se ha mejorado considerablemente.

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.