ASP.NET





Internacionalización

Localizando Data Annotations


El espacio de nombres System.ComponentModel.DataAnnotations proporciona clases de atributos que se usan para definir los metadatos para ASP.NET MVC y los controles de ASP.NET.

Estos atributos nos permiten especificar las cadenas a utilizar en la interfaz de la aplicación cuando se hace referencia al campo, se detectan errores de validación, etc. Esto resulta muy útil para tener definidas estas cadenas en un único lugar de la aplicación y que los mensajes al usuario sean uniformes a lo largo de toda nuestra aplicación.

Sin embargo, en este mundo cada vez más globalizado, cada vez son menos las aplicaciones cuyo interfaz se define en un único idioma. Entonces, ¿cómo utilizamos los atributos del namespace DataAnnotations de forma que nuestros textos se adapten al idioma del usuario?

Artículos:
Código:

Gestión de Errores

Definir páginas de error personalizadas


En muchas ocasiones nos puede interesar páginas de error personalizadas en nuestros proyectos, bien para mostrar información de ayuda para el usuario o datos de contacto de nuestro departamento de soporte.

ASP.NET nos permite configurar estas páginas de error personalizadas de forma sencilla.

Artículos:





Pruebas (Testing)

Integrar Tests JavaScript en Visual Studio


Visual Studio nos proporciona herramientas para crear y gestionar tests del código de nuestras aplicaciones. En el caso de las aplicaciones ASP.NET estas herramientas nos permiten gestionar tests del código de servidor, sin embargo no disponemos de ninguna herramienta para testear el código JavaScript del lado de cliente.

Para realizar ese tipo de tests podemos utilizar diferentes librerías como Jasmine o QUnit, sin embargo estas librerías proporcionan sus propios entornos de ejecución de las pruebas por lo que tendremos que acceder a dos entornos diferentes para ejecutar el conjunto completo de tests.

Por suerte existe una herramienta de software libre que nos permite integrar los tests JavaScript en el Explorador de Pruebas del Visual Studio: Chutzpah.

Artículos:

MVC

Enrutamiento

Propagando el QueryString


En ocasiones nos podemos encontrar con en una acción de redirección necesitamos pasar valores recibidos en el QueryString a la acción destino. Si los posibles parámetros son pocos y claramente definidos podemos hacerlo a través del parámetro routeValues. ¿Pero qué pasa si los posibles parámetros son muchos o, peor aún, indefinidos?

He leído algún comentario por parte del equipo de desarrollo de MVC indicando que es una problemática a la que tienen pensado dar solución en futuras versiones. Pero, ¿qué se puede hacer mientras tanto?

Artículos:
Código:

Vistas

Editores Date y DateTime con helper para gestión de scripts


Cómo crear en un proyecto MVC un editor personalizado para los tipos de datos de fecha y fecha y hora, gestionando la carga de scripts para no repetir código y descargar los scripts una única vez. El editor se basa en el plugin DateTimePicker de jQuery.

Artículos:
Código:

Obtener el código generado por una vista Razor cshtml/vbhtml


El motor de vistas de Razor traduce las vistas escritas en sintaxis Razor a clases con código en C# o VB.NET y a continuación las compila. Este es el motivo por el que resulta tan sencillo incluir fragmentos de código en C# o VB.NET en las vistas.

En ocasiones puede resultar útil analizar el código de estas clases, bien para localizar errores, bien para comprender cómo funcionan estas vistas. Sin embargo puede resultar complicado localizar los archivos en los que el motor de vistas Razor genera este código. Vamos a ver cómo podemos encontrarlos de manera sencilla.

Artículos:

Personalizar el Motor de Vistas


El Framework de ASP.NET MVC incorpora el motor de vistas Razor, el cual proporciona un formato de vistas muy flexible y potente. Sin embargo existen escenarios en los que puede resultar compleja definir nuestras vistas utilizando Razor.

Por suerte ASP.NET MVC está diseñado expresamente para permitir una gran flexibilidad y extensibilidad y, para estos casos, nos permite crear nuestro propio motor de vistas.

Artículos:
Código:

htmlAttributes en los métodos Editor y EditorFor


En muchos de los métodos de extensión de la clase HtmlHelper de ASP.NET MVC podemos encontrar un parámetro htmlAttributes que nos permite indicar valores a atributos HTML adicionales a incluir en el código HTML generado por el método.

Estos parámetros suelen aceptar un objeto IDictionary en los que la clave de cada elemento representa el nombre del atributo y el valor del elemento representa el valor del atributo, o un objeto en el que el nombre de sus propiedades se corresponden con los nombres de los atributos y el valor de éstas con el valor de los atributos.

Sin embargo hay dos métodos de gran uso, y en los que resultaría extremadamente útil, en los que no se incluye en ninguna de sus sobrecargas: los métodos Editor y EditorFor.

Artículos:

Validación

ModelValidatorProvider personalizado


El espacio de nombres System.ComponentModel.DataAnnotations nos proporciona diferentes atributos de validación con los que decorar las clases y propiedades del modelo. Estos atributos son interpretados por el framework de ASP.NET MVC para aplicar estas validaciones en nuestros controladores y vistas.

Sin embargo existen ocasiones en que estas validaciones no podemos definirlas de manera estática en la definición del modelo porque dependen de otras variables. Por ejemplo, ¿cómo definimos el rango de valores aceptados por un campo importe si el importe máximo depende del usuario que esté realizando la operación?

Por suerte la extensibilidad del framework de ASP.NET MVC nos permite crear nuestro propio proveedor de validaciones en el que podemos tener en cuenta circunstancias como ésta.

Artículos:
Código:

Data Binding

ModelBinder Personalizado


Una de las herramientas más útiles de las que disponemos en ASP.NET MVC es el data binding o enlace de datos, que se encarga de transformar de manera automática los datos recibidos del navegador a los tipos de datos usados en los argumentos de las acciones de nuestros controladores.

Sin embargo el proceso de binding que realiza por defecto MVC se nos puede quedar corto cuando utilizamos tipos de datos complejos.

En este artículo se muestra cómo podemos indicarle a MVC cómo debe realizar el enlace de datos con un tipo de datos predeterminado a través de la implementación de un ModelBinder.

Artículos:
Código:

ModelBinderProvider para tipos genéricos


Podemos crear y registrar un ModelBinder personalizado en una aplicación MVC para enlazar tipos de datos complejos. Sin embargo, el tipo de datos que indicamos a MVC a la hora de registrar el ModelBinder debe ser un tipo de datos específico, no podemos indicar un tipo genérico.

Entonces, ¿cómo podemos crear un ModelBinder para un tipo de datos genérico que ASP.NET MVC no es capaz de enlazar por defecto?

En estos artículos se muestra cómo crear y registrar un ModelBinderProvider para el tipo genérico KeyValuePair.

Artículos:
Código: