Saltar al contenido

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript... y lo que venga ;)

18 años online

el blog de José M. Aguilar

Inicio El autor Contactar

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web
ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript...

¡Microsoft MVP!
miércoles, 2 de septiembre de 2009

A finales del pasado mes de Julio, Haack, Scottgu, y un sinfín de figurillas más, anunciaron la publicación del código fuente e instaladores de la primera preview de la nueva versión de la plataforma ASP.NET MVC.

Tal y como se describe en el Roadmap del producto, el objetivo de la versión 2 es aumentar la productividad de los desarrolladores que trabajen con el framework, así como cubrir determinadas necesidades muy comunes y que no llegaron a introducirse en la primera versión del producto, como las siguientes.

Soporte para “áreas”

Soporte para áreas en ASP.NET MVC 2Las áreas son subproyectos independientes con rutas, vistas y controladores que implementan una sección específica de las funcionalidades de un sistema de forma muy aislada y reutilizable. Ejemplos directos serían un sistema de foros, o un motor de blogs; implementados como áreas, una solución web que necesitara incluir dichas funcionalidades simplemente debería referenciarlas y realizar pequeños ajustes para, a partir de ese momento, poder contar con ellas.

La limpieza del enfoque adoptado favorece la organización, reutilización, el trabajo en equipo y, además, seguro que provoca la aparición de muchos componentes complejos, tanto comerciales como libres, distribuidos de esta forma y listos para ser incluidos en nuestras aplicaciones de forma sencilla.

En cualquier caso, esta primera preview incluye soporte aún muy básico para las áreas, y para utilizarlas hay que tocar a mano los archivos de proyectos (hay un paso a paso en MSDN que describe cómo hacerlo) . Ya en futuras revisiones se irá introduciendo en el IDE las herramientas para gestionarlas, así como nuevas posibilidades para su integración en un proyecto único.

Nuevo conjunto de helpers de interfaz de usuario

Métodos utilizables desde las vistas que seguro que nos harán la vida más fácil al utilizar tipado fuerte para vincular controles de edición y visualización de información a propiedades del modelo, además de permitir el diseño de plantillas para tipos de datos específicos.

En la versión 1 de ASP.NET MVC:
<%= Html.TextBox("Nombre", Model.Nombre) %>        
 
En la versión 2:
<%= Html.EditorFor(persona=>persona.Nombre) %>

Fijaos que desaparecen los nombres mágicos (constantes entrecomilladas) necesarios en la versión 1 para generar los controles de edición, y pasan a ser expresiones lambda que referencian directamente a la propiedad del modelo, por lo que se podría comprobar su corrección en tiempo de compilación.

EditFor() con un tipo complejoPero Html.EditorFor() no sólo es aplicable a tipos “nativos”, también pueden ser estructuras complejas (por ejemplo, la clase Persona), para las que generará por defecto los controles de edición de todas sus propiedades, salvo aquellas en las que se haya indicado expresamente lo contrario. Esto, que en escenarios simples puede resultar suficiente para crear formularios de edición de datos, se realizaría haciendo que la lambda devuelva el propio objeto del modelo:

<% using (Html.BeginForm()) { %>
    <%= Html.EditorFor(persona=>persona) %>
    <input type="submit" value="Enviar" />
<% } %>

Internamente, Html.EditorFor() buscará antes de renderizar ningún resultado HTML si existe una plantilla de edición para el tipo de datos devuelto por la lambda en la carpeta Views\Shared\EditorTemplates, con el nombre NombreDelTipo.ascx (por ejemplo Persona.ascx). También es posible indicarle explícitamente la plantilla que debe usar para renderizar el editor, tanto en el momento de invocar al helper como a nivel de la propia clase del modelo.

Todo lo dicho hasta ahora es válido para la visualización de datos, que utilizará el helper Html.DisplayFor(): de la misma forma, los parámetros fuertemente tipados del método nos ayudarán a detectar errores en fase de compilación, y existe igualmente la posibilidad de definir las plantillas, aunque la carpeta donde se habrán de colocar debe ser en esta ocasión Views\Shared\DisplayTemplates. Hay un buen paso a paso, aunque en inglés, de cómo utilizar este tipo de plantillas.

Un último helper más, LabelFor(), está especialmente creado para generar etiquetas asociadas a controles de edición. Su principal particularidad es que es capaz de tomar la descripción del campo desde los metadatos de la clase del modelo. Esta técnica es la misma que utiliza otra de las grandes novedades de esta versión, el sistema de validación.

Mecanismo de validación integrado

Ese gran ausente en la primera versión del framework MVC que hacía que tuviéramos que encargarnos a mano de comprobar uno por uno los datos de entrada (o utilizar frameworks externos) para que no se colara en el modelo información inválida. La solución viene de mano de las Data Annotations, un conjunto de atributos que podemos aplicar a las entidades de datos para indicar restricciones aplicables a sus valores:

public class Persona
{
    [DisplayName("Nombre")]
    [Required(ErrorMessage = "El nombre es obligatorio!")]
    [StringLength(45)]
    public string Nombre { get; set; }
 
    [DisplayName("Número de hijos")]
    [Range(0, 15)]
    public int NumeroDeHijos { get; set; }
}

En el ejemplo anterior vemos un caso simple en el hemos añadido metadatos a la clase del modelo que describen las particularidades de cada propiedad. ASP.NET MVC Framework versión 2 es capaz de obtener esta información y utilizarla para validar la entrada de datos al recibir un formulario, o incluso en cliente por obra y gracia de un plugin para jQuery que será incluido en la plantilla, aunque esto todavía no está disponible en esta preview.

Un detalle interesante a tener en cuenta es que, dado que las clases de datos son habitualmente generadas por herramientas automáticas, estos los metadatos pueden ser definidos en clases paralelas (clases ‘buddy’). Una solución un poco anti-DRY, pero bueno…

Otras mejoras

Hay otras mejoras de menor calado aunque también interesantes, como la inclusión del nuevo atributo [HttpPost] para acelerar la declaración de acciones restringidas a ese método del protocolo, el soporte para valores por defecto en parámetros (basado en atributos hasta que llegue el nuevo C# 4.0, aunque ya disponible en VB), o algunos cambios en el API (algunos de ellos “rompedores”). Todos estos detalles pueden consultarse en el documento de notas de la revisión.

ASP.NET MVC 1 y 2 al mismo tiempo, vamos a llevarnos bien...Si quieres ir probando en persona las novedades, puedes descargar la preview y jugar con ella desde Visual Studio 2008 SP1 (también funciona para Visual Web Developer Express 2008 SP1, el IDE gratuito) sin peligro alguno. El instalable en ningún momento sobrescribe librerías o componentes de la versión 1.0, sólo creará un nuevo juego de plantillas para esta versión. Eso sí, si eres de los afortunados que están ya exprimiendo la beta 1 de VS2010, has de saber que no son compatibles, tendrás que esperar hasta la beta 2, la cual ya incluirá la próxima preview del framework.

Seguiremos atentos a la evolución del framework, que estos muchachos están que no paran…


Publicado en: Variable not found.

Aún no hay comentarios, ¡sé el primero!