Anuncio de ASP.NET MVC3 (Release Candidate 2)

Hace podo el equipo de ASP.NET publicó la release candidate final (RC2) de ASP.NET MVC 3. Podéis descargar e instalarlo aquí.

Casi aquí….

Esta release RC2 es la última release antes de la versión final ASP.NET MVC 3, y es una verdadera “release candidate” en la que no esperamos hacer ningún cambio de código más. La publicamos ahora para que la podáis probar, hacernos saber si encontráis algún problema, y empezar a acutualizar las aplicaciones para que las usen. Publicaremos la versión final ASP.NET MVC “RTM” en Enero.

 Funciona tanto en VS 2010 como en VS 2010 SP1 Beta

ASP.NET MVC 3 RC 2 funciona tanto para Visual Studio 2010 y Visual Web Developer 2010 Express, así como en la nueva release VS 2010 SP1 Beta.

Esto significa que no tenemos que instalar VS 2010 SP1 (o la SP1 Beta) para poder usar ASP.NET MVC 3. Funciona con VS 2010. Escribiré un post la próxima semana sobre algunas de las mejoras que vienen con VS 2010 SP1 (incluyeno IIS Express y SQL CE ) lo que hace que la experiencia de desarrollo tanto para ASP.NET Web Forms como para ASP.NET MVC sea mejor.

Errores y rendimiento corregidos.

ASP.NET MVC RC 2  contiene algunos bugs corregidos y optimizaciones de rendimiento. Nuestros últimos test de rendimiento indican que ASP.NET MVC 3 es más rápida que ASP.NET MVC 2, y las aplicaciones existentes de ASP.NET MVC experimentarán una mejora de rendimiento cuando se actualizen para usar ASP.NET MVC 3.

Ajustes y correcciones finales.

Además de los bugs corregidos y las optimizaciones de rendimiento, esta RC 2 contiene unas mejoras de último moneto para las características de ASP.NET MVC 3. El feedback y las sugerencias que hemos recibido durante las public previews ha sido increibles para guiarnos por esos trucos finales, y realmente apreciamos el soporte de la gente mandándonos su feedback.

Aquí tenéis una pequeña lista con algunas de las características que hemos hecho entre la RC y la RC 2:

Actualizaciones de jQuery y adición de jQuery UI

La plantilla por defecto de ASP.NET MVC 3 han sido actualizadas para que incluyan jQuery 1.4.4 y jQuery Validation 1.7.

También estamos orgullosos de haber incluido jQuery UI en la plantilla por defecto de proyectos ASP.NET. jQuery UI ofrece un conjunto de widgets y capacidades para UI muy potentes. Se añadirá por defecto en el directorio scripts de nuestros proyectos cuando creemos proyectos ASP.NET MVC 3

Mejora en la estructura básica de las vistas

Las plantillas T4 usadas para la estructura básica de las vista en el diálogo Add-View ahora genera las vistas que usan Html.Editorfor en lugar de los métodos como Html.TextBoxFor. Este cambio nos permite anotar nuestros modelos con metadatos (usando atributos de data annotation) para personalizar la salida de nuestra UI en tiempo de ejecución.

La estructura básica de Add View también mejora el uso de información clave de los modelos (incluyendo el soporte de convención de nombres como ID, ProductID, etc). Por ejemplo: El diálogo Add View usa esta información para asegurarse de que el valor de la clave primaria no se muestra en un textbox editable, y que los enlaces entre vistas se generan automáticamente con la información de esa clave primaria.

Las plantillas por defecto de Edit y Create también incluyen referencias a los scripts de jQuery necesarios para validación de cliente. Los formularios de las vistas soportan validación de cliente por defecto (no hace falta ningún paso adicional). La validación del lado del cliente de ASP.NET MVC 3 se consigue usando una aproximación javascript no intrusiva – consiguiendo páginas rápidas y limpias.

[ControllerSessionState]->[SessionState]

ASP.NET MVC 3 soporta controladores sin sesion. Con la RC inicial usábamos el atributo [ControllerSessionState] para indicar esto. Hemos acortado esto en la RC 2 para que sólo sea [SessionState]:

Fijáos que además de quitar el estado de sesión, también podemos ponerlo como de sólo lectura (lo que es útil en escenarios de granjas web donde leemos pero no actualizamos el sesion state en una petición particular).

[SkipRequestValidation]->[AllowHtml]

ASP.NET MVC lleva integrado el soporte necesario para protegerse contra ataques de HTML y Cross-Site Script, y lanzarán un error por defecto si alguien intenta de mandar contenido HTML como entrada. Los desarrolladores deben indicar explícitamente de que está permitido(y que crearán sus aplicaciones para soportarlo de forma segura) para poder hacerlo.

Con ASP.NET MVC 3, también se va a soportar un nuevo atributo que podemos aplicar en las propiedades de los modelos para indicar que está permitida la entrada de HTML, permitiendo que una protección más granular de una manera DRY. En la RC del mes pasado este atributo se llamaba [SkipRequestValidation]. En la RC 2 lo hemos renombrado a [AllowHtml] para hacerlo más intuitivo:

Poniendo el atributo [AllowHtml] en un modelo o vista hará que ASP.NET MVC 3 deshabilite la protección de inyección HTML.

Método helper Html.Raw()

 El nuevo motor de vistas Razor introducido con ASP.NET MVC 3 codifica salida HTML por defecto. Esto ayuda a ofrecer un nivel adicional de protección contra ataques de inyección HTML y Scripts.

Con la RC 2 hemos añadido el método Html.Raw que podemos usar para indicar explícitamente que no queremos codificar HTML en nuestra salida, y que en lugar de eso queremos renderizar el contenido como está:

ViewModel/View ->ViewBag

ASP.NET MVC (desde la V1) soportaba el diccionario ViewData[] en los controladores y vistas que permitía a los desarrolladores pasar información de un controlador a una vista. Esta aproximación puede ser usada en lugar de, o en convinación con, una clase de modelo fuertemente tipada. El código siguiente muestra un caso de uso común – donde un modelo Product fuertemente tipado se pasa a la vista además de dos variables a través del diccionario ViewDate[]:

Con ASP.NET MVC 3 hemos introducido una nueva API que aprovecha el soporte para tipos dinámicos de .NET 4 para modificar/obtener estos valores. Esto nos permite usar la notación “punto” para indicar cualquier número adicional de variables que se pasen, sin ser necesario que nos creemos una clase fuertemente tipada para ello.

En previews anteriores de ASP.NET MVC 3 publicamos esta API usando la propiedad dinámica llamada “ViewModel” en la clase base Controller, y con una propiedad dinámica llamada “View” en las plantillas de vistas. Mucha gente ha visto que estos dos nombres diferentes llevan a confusión, y otros también dicen que usar el nombre ViewModel era confuso en este contexto – desde que creamos clases ViewMOdel fuertemente tipadas en ASP.NET MVC, y no usan esta API.

Con esta RC 2 exponemos una propiedad dinámica llamada – ViewBag- tanto en los controladores como en las vistas. Es una colección dinámica que nos permite pasar bits addicionales de datos desde nuestras controladores a nuestras vistas para ayudar a generar la respuesta. Aquí tenéis un ejemplo de cómo podemos usarlo para pasar un mensaje de time-stamp así como una lista de categorías a nuestra vista:

Aquí tenéis un ejemplo de cómo nuestra vista (que está fuertemente tipada para recibir un objeto del tipo Product) puede usar dos bits más de información que hemos pasado en el ViewBag para generar la respuesta. En concreto, fijáos cómo estamos usando la lista de categorías que hemos pasado en la colección ViewBag para generar un desplegable de nombres de categorías para ayudar a indicar la propiedad CategoryID del objeto Producto:

La anterior convinación de Controlador y vista generar el siguiente HTML:

Mejoras en Output Caching

El sistema de cahé de salida de ASP.NET MVC 3 no necesita más que se le indique una propiedad VaryByParam cuando declaramos el atributo [OutputCache] en un método de acción de un Controlador. MVC3 modifica automátiamente las entradas de la cache de salida cuando tenemos parametros explícitos en nuestro método de acción – permitiendo habilitar de forma limpia la cache de salida usando el código siguiente:

Además de soportar cache de salida para toda la página, ASP.NET MVC 3 también soporta cache parcial de página – lo que nos permite cachear una región de la salida y reusarla en múltiples peticiones o controladores. El comportamiento de [OutputCache] para cacheado parcial se ha actualizado en esta RC 2 de manera que las entradas contenidas varñien en función de los parámetros de entrada como oposición a la estructura URL  en la petición de más nivel – lo que convierte los escenarios de cacheado sean más sencillos y más potentes que en versiones anteriores.

Delcaraciones @model no añaden espacios en blanco

En previews anteriores, la declaración fuertemente tipada @model al principio de una vista Razor añadía una linea en blanco al HTML de salida generado. Esto ha sido corregido para que esta declaración no genera esa linea en blanco.

Cambiado el método “Html.ValidationMessage” para mostrar el primer mensaje de error útil

El comportamiento del método Html.ValidationMessage() ha sido actualizado para mostrar el primer mensaje de error útil en lugar de mostrar el primer mensaje de error.

Durante el binding del modelo, el diccionario ModelState puede ser calculado desde multiples fuentes con mensajes de error sobre la propiedad, incluyendo la pripiedad en si misma (si implementa el método IValidatableObject), los atributos de validación aplicados a la propiedad, y excepciones lanzadas cuando la propiedad es accedida.

Cuando el método Html.ValidationMessage() muestra un mensaje de validación, se salta las entradas del model-state que incluye excepciones, porque esos errores no se suelen querer mostrar. En lugar de eso, el método busca por el primer mensaje de validación que no esté asociado a una excepcion y muestra ese mensaje. Si no se encuentra un mensaje así, muestra por defecto un error genérico que está asociado a la primera excepción.

Atributo [Remote] “Fields” -> “AdditionalFields”

ASP.NET MVC 3 incluye el soporte para validaciones remotas en su infraestructura de validación. Esto significa que las validaciones del lado cliente de la librería de scripts usada por ASP.NET MVC 3 puede llamar a los controladores que expongáis en el servidor para determinar si un elemento de entrada es válido tal y como el usuario lo ha editado en el formulario (permitiendoos ofrecer actualizaciones de validaciones en tiempo real).

Podemos conseguir esto decorando las propiedades del modelo o del viewmodel con el atributo [Remote] que indica el contorlador/acción que debe ser invocado para validarlo remotamente. Con la RC este atributo tenía la propiedad “Fields” que podíamos usar para indicar elementos de entrada adicionales que deben ser enviados del cliente al servidor para ayudar a la lógica de validación. Para mejorar la claridad de esta propiedad la hemos renombrado a “AdditionalFields” en la RC 2.

Propiedades ViewResult.Model y ViewResult.ViewBag

La clase ViewResult expone las propiedades “Model” y “ViewBag”. Esto hace más sencillo hacer test unitarios a Controladores que devuelven las vistas, y nos evitan tener que acceder al modelo a traves de la propiedad ViewResult.ViewData.Model.

Notas de instalación

Podéis descargar e instalar ASP.NET MVC 3 RC 2 aquí. Puede ser intalado encima de ASP.NET MVC 3 RC (sólo reemplaza los bits como parte de la instalación).

El único componente que no será acutalizado en la instalación (si ya lo tenéis instalado) es el NuGetPackageManager. Si ya tenéis NuGet instalado, id al Visual Studio Extensions Manager (ToolsExtensions) y haced clic en el tab “Updates”. Veréis NuGet en la lista – por favor, haced clic en el botón “Update” al lado de él para tener la versión actualizada de la versión de hoy.

Si no tenéis NuGet instalado (y no se instalo con ASP.NET MVC RC), NuGet se instalará como parte de la instalación de ASP.NET MVC 3, sin tener que hacer nada más.

Resumen

Estamos muy cerca de la release final de ASP.NET MVC 3, y publicaremos la RTM final el més que viene. Han pasado tan solo 7 meses desde que publicamos ASP.NET MVC 2, y estoy impresionado de la cantidad de nuevas características y mejoras que el equipo ha sido capaz de añadir en esta release (Razo, JavaScript no intrusivo, NuGet, Inyección de dependencias, Output Caching y un montón más). Escribiré algunos post en las próximas semanas sobre algunas de esas características en más profundidad.

Espero que sirva.

Scott.

Traducido por: Juan María Laó Ramos.

Artículo original.

0 comentarios sobre “Anuncio de ASP.NET MVC3 (Release Candidate 2)”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *