ASP.NET MVC 3: Nueva palabra reservada @model

Hace dos semenas publicamos ASP.NET MVC 3 Beta. Soporta desarrollos "go live", e incluye un montón de mejoras. Podéis leer un resumen de las nuevas características de ASP.NET MVC 3 en mi post anterior. Leed también mi post oroginal sobre la Preview de ASP.NET MVC 3 para aprender sobre otras características que vimos con la release previa.

Este post es el primero de varios "mini-post" en los que hablaré sobre las nuevas características de ASP.NET MVC 3 en más detalle. En el post de hoy veremos la nueva directiva @model que está soportada ahora con el motor de vistas Razor, y que nos ayuda a hacer archivos de vista más concisos y claros.

Razor Basics

ASP.NET MVC 3 viene con la opción de un nuevo motor de vistas llamado "Razor" (Además de soportar y amplicar el motor actual de .aspx).

Podéis aprender más sobre Razor, porqué lo hemos introducido, y la sintaxis que soporta en mi post de Introducción a Razor. Si aún no lo habéis leído, tomaros unos minutos y hacedlo ahora (ya que el resto del post asumirá que lo habéis leido).

Una vez que lo hayais leído, leed también el de ASP.NET MVC 3 Preview y ved el ejemplo con Razor que introduje.

Nueva directiva @model

Vamos ahora a ver una nueva característcia que hemos incluido en ASP.NET MVC 3 bETA - la directiva @model. Esta directiva ofrece una forma más clara y concisa de referenciar modelos fuertemente tipados en archivos de vista.

Para verlo en acción vamos un super simple escenario en elque queremos implementar una URL /Products que liste las categorías de productos de una base de datos:

Aquí teneis una implementación ProductsController que implementa esta URL. Obtiene una lista de categorías de productos de la base de datos, y se la pasa a la vista para que lo renderize en HTML al navegador:

Referenciando el modelo con la primera Preview de ASP.NET MVC 3

Si hemos usado Razor con la primera Preview de ASP.NET MVC 3, nuestro achivo Index.cshtml tendrá una sentencia @inherits al principio del archivo que indica que queremos derivar la vista de la clase "System.Web.Mvc.WebViewPage<TModel>". Luego indicamos que queremos que nuesra vista sea fuertemente tipada pasandole el tipo del modelo:

Esto funciona ( y sigue soportado en ASP.NE TMVC 3) - pero es un poco "verboso".

Referenciando el modelo usando la sintaxis @model en ASP.NET MVC 3

Hemos añadido la nueva directiva @model de ASP.NET MVC 3 para que ofrezca una forma más concisa y clara de indicar que queremos usar modelos de clases fuertemente tipadas en nuestros archivos de vista. Podemos escribir @model Tipo al principio de la vista de Razor, y no tendremos que usar @inherits para indicar una clase base nunca mas:

La sintaxis anterior es conceptualmente la misma que la otra (excepto por el número de caracteres). Es más sencillo de leer y de escribir.

Aquí tenéis el código completo de Index.cshtml para renderizar el ejemplo original:

Lo que os estaréis preguntando es - ¿de qué deriva mi vista si no pongo nada? Por defecto, Razor deriva todas las vistas de la clase System.Web.Mvc.WebViewPage<TModel>. Podemos sobreescribir este comportamiento  modificando el web.config de vuestro directorio Views. Esto nos permite mantener una sintaxis más limpia (DRY) en nuestras vistas incluso aunque nos hayamos creado una clase base para nuestras vistas.

Nota: El intellisense y el coloreado en archivos Razor aún no están habilitados en esta Beta. Lo tendremos disponible en unas semanas - y soportará intellisense completo para HTML, JavaScript, CSS y C#/VB.

Resumen

Uno de los objetivos marcados en ASP.NET MVC 3 Y Razor ha sido conseguir que el código que se escriba sea más conciso y claro. La directiva @model es una pequeña característica, pero contribuye enormemente ha conseguir que los archivos de vistas sean más fáciles de leer y escribir. Veremos otras pequeñas mejoras como esta en ASP.NET MVC 3 en próximos post.

Espero que sirva,

Scott.

Traducido por: Juan María Laó Ramos.

Artículo original.