ASP.NET MVC 5 – Attribute routing II

En el post anterior prometí ampliar un poco más el tema del routing por atributos. En este caso vamos a hablar de parámetros opcionales, valores por default, prefijos y rutas por default.

Parámetros opcionales y Valores por default

Definir que un parámetro es opcional es tan simple como poner el signo de interrogación “?” al final del nombre del mismo. En el siguiente ejemplo estamos diciendo que el parámetro value es opcional:

Parámetro Opcional

Parámetro Opcional

Para definir el valor por default de un parámetro simplemente agregamos al final del nombre el signo “=” y a continuación el valor. En el siguiente ejemplo el parámetro value tiene como valor por defecto el texto “Valor por default”:

Valor por default

Valor por default

Podemos probar lo anterior utilizando las siguientes URIs:

Prefijos

Algo que podemos definir para un conjunto de rutas es un prefijo. Por ejemplo, si todas las rutas del controlador ProductsController van a comenzar con el prefijo “productos”, podemos especificar – a nivel controlador – el mismo valor utilizando el atributo [RoutePrefix] :

Prefijos

Prefijos

Con esto evitamos tener que agregar el prefijo “producto” en cada atributo de acción. En caso de que queramos omitir el prefijo en algún método de acción, simplemente debemos agregar el tilde “~” en la definición de la ruta, un ejemplo seria el siguiente: “~/principal”.

Rutas por default

Otra cosa que podemos hacer es definir una ruta por default. Para esto debemos aplicar el atributo [Route] en el controlador y especificarle la acción que deseamos por default utilizando para ello el parámetro action. En el ejemplo estamos diciendo que la ruta por default es la acción Default – chan! -:

Default Route

Default Route

Importante! La acción que definamos por default no debe tener el atributo [Route] (caso contrario este atributo sobre-escribe el del controlador pisando esta regla).

Espero que les sea de utilidad!

En el próximo post vamos a ver algunas características por demás interesantes como restricciones y áreas.

ASP.NET MVC 5 – Attribute routing

Hasta ahora el mecanismo de enrutamiento de ASP.NET MVC  establecía que una URI coincidía con una acción – dicho mecanismo es conocido como enrutamiento basado en convención-. Una de las novedades de ASP.NET MVC 5 es un nuevo mecanismo de routing basado en atributos – Attribute Routing – el cual utiliza atributos para definir el ruteo, y nos permite tener mucho mas control sobre las URI de nuestra web.

Importante! En ASP.NET MVC 5 ambos mecanismos de routing son soportados y es posible combinar el uso de ambas técnicas dentro del mismo proyecto.

Veamos un ejemplo para ver toda la potencia del routing basado en atributos. Imaginemos que tenemos una página web de venta de productos y queremos el detalle de un producto tenga una URL similar a la siguiente:

http://localhost:8080/productos/1/Televisor 100 pulgadas

Y que se rutee a la siguiente acción:

ProductsController.Detail(int productId);

Como pueden ver en este caso hay varias cuestiones que “complican” el ruteo basado en convenciones. En primer lugar estoy usando en la URI el nombre productos para hacer referencia al controlador Products (esto suponiendo que mi sitio esta orientado al publico latinoamericano). Por otro lado en ningún momento hacemos referencia al nombre de la acciónDetail -. Y por último el titulo del producto es algo meramente descriptivo y mi acción no va hacer nada con él – al menos en este caso -.

Si bien esto no es imposible de hacerlo utilizando convention-based routing, si es cierto que se puede tornar molesto cuando debemos hacerlo repetidas veces:

Definición utilizando convention-based routing

Definición utilizando convention-based routing

Ahora trabajemos utilizando atributos! Lo primero que debemos hacer para habilitar esta feature es invocar a la función MapMvcAttributeRoutes en el proceso de registración del routing:

Habilitando Attribute Routing

Habilitando Attribute Routing

Lo que queda ahora es simplemente definir el routing por medio del atributo [Route]:

Definiendo el ruteo por medio de atributos

Definiendo el ruteo por medio de atributos

Simple, no?

Pero eso no es todo, también es posible definir prefijos, rutas por default, restricciones y áreas (temas que veremos es los siguientes posts).

Espero que les sea de utilidad!

Tyni Post – VS2013 Map code for vertical scrollbar

Una de las features que trae Visual Studio 2013 y que varios veníamos pidiendo desde hace tiempo es la vista previa del código – Map Code – en la barra de scroll vertical (característica que trae Sublime Text desde hace mucho tiempo).

Para activar esta característica debemos hacer click derecho sobre la barra de scroll y hacer check en “Scroll Bar Options” >> “Use map code for vertical scrollbar“.

Scroll Bar Options

Scroll Bar Options

Realizado esto ya podemos hacer uso de la vista previa del código, incluyendo referencias a los puntos de interrupción, marcadores y cambios en el código:

Map code for vertical scrollbar

Map code for vertical scrollbar

De los marcadores el rojo indica un error, el amarillo un cambió en el código y el verde los últimos cambios realizados. Otra característica que ofrece es que si nos posicionamos arriba de la vista previa, aparecerá una ampliación del código en dicha posición:

Zoom y bookmarks

Zoom y bookmarks

Espero que les sea de utilidad!

ASP.NET MVC 5 – Bootstrap en los templates de MVC

Otra de las características que trae ASP.NET MVC 5 es que las plantillas de proyectos utilizan por default Twitter Bootstrap  – actualmente en la versión 3.0.0 – como framework para nuestras interfaces de usuario.

Bootstrap, para quienes no lo conozcan, es un User Interface Framework open source desarrollado y mantenido para el equipo de desarrollo de Twitter. Este marco de trabajo nos permite construir, bajo un sistema de cuadrillas y CSS3, páginas responsivas. El diseño  web responsivo establece tener una única interfaz de usuario que se ajusta-alinea automáticamente a las distintas resoluciones de los distintos dispositivos (PCs, tablets, telefonos…). Además nos proporciona de estilos y recursos que hacen que nuestras páginas luzcan más modernas, atractivas y compatibles con las mayorías de los navegadores web.

Página creada con Boostrapt

Página creada con Boostrapt

Si prestan atención, cuando generamos un nuevo proyecto ASP.NET MVC 5 en VS2013 entre los scripts JS está incluida la librería de Bootstrap:

Librerías Boostrapt

Librerías Boostrapt

También están definidos los bundles correspondientes- archivo BundleConfig.cs – tanto para las librerías JS como para la hoja de estilo CSS:

Bundles de Boostrapt

Bundles de Boostrapt

Y por último las referencias en la vista _Layout.cshtml:

Referenciando a Boostrapt desde las vistas

Referenciando a Boostrapt desde las vistas

Otro aspecto importante es que todas las vistas generan por defecto código basado en este framework:

El código de las vistas basado en Boostrapt

El código de las vistas basado en Boostrapt

Si ejecutamos la aplicación y ajustamos el tamaño del navegador a una resolución acorde a la de un dispositivo móvil veremos como actúa el diseño responsivo (todo el contenido se ajusta en la pantalla y el menú superior es agrupado dentro de un icono que se expande al hacer click):

Diseño responsivo en acción

Diseño responsivo en acción

Para que quede claro la intención del post no es enseñarles a trabajar con Boostratp sino comentarles la adopción de este como framework UI por defualt. Si quieren conocer más pueden hacerlo desde aquí.

Antes de finalizar, es importante aclarar que la utilización de Bootstrap es solo una sugerencia (particularmente lo recomiendo), pero es posible utilizar cualquier otra librería o simplemente no utilizar ninguna.

Quienes deseen más de info sobre el tema les recomiendo este artículo de Tom Dykstra y este artículo de mi amigo Julio Avellaneda.

Espero que les sea de utilidad!

Bienvenido ASP.NET MVC 5!

ASP.NET MVC

ASP.NET MVC

Como muchos ya sabrán hace poco Microsoft lanzo nuevas versiones de sus productos y frameworks, entre ellos Visual Studio 2013 (producto) y ASP.NET MVC 5 (framework).

ASP.NET MVC 5 no trae demasiadas novedades (como en versiones anteriores) y por el momento solo esta disponible – de forma totalmente integrada – con VS2013 (es posible utilizarlo en VS2012 instalando los binarios por medio de Nuget: Install-Package Microsoft.AspNet.Mvc).

En este post solo vamos a nombrar las nuevas features del framework, y en siguientes post vamos a ampliar sobre cada una.

Características:

  • One ASP.NET
    Es una nueva plantilla de proyectos ASP.NET que permite customizar y configurar nuestras aplicaciones MVC.
  • ASP.NET Identitity
    Los templates de proyectos ASP.NET MVC se han actualizado para usar ASP.NET Identity en cuestiones de autenticación y gestión de identidad.
  • Bootstrap in the MVC template
    Integración de Bootstrap en las vistas para proporcionar un aspecto elegante y responsivo a nuestras aplicaciones.
  • Authentication Filters
    Nuevos tipos de filtros de autenticación que se complementan al filter [Authorize]. Estos se ejecutan previamente y permiten añadir lógica para validar un usuario y asociarlo a la petición (ya sea a nivel de una acción, controlador o de forma global).
  • Filter overrides
    Permiten definir que filtros no se deben ejecutar en un método de acción o controlador. Por ejemplo podemos definir un filter de forma global y especificar que para cierto controlador o acción el mismo no se ejecute.
  • Attribute routing
    Soporte para routing basado en atributos (gracias a la contribución de Tim MacCallhttp://attributerouting.net). Esta característica nos permite definir nuestras rutas utilizando atributos sobre las propias acciones y controladores.

Si bien nos son revolucionarios los cambios de esta nueva versión de ASP.MVC, hay mucho por investigar, estudiar y conocer 🙂

Nos vemos en próximos post ampliando cada una de estas características!