Developer's Diary

2 agosto, 2014

Curso – Apuntes de ASP MVC 4 Con Razor (IV) – Model Binders y Custom Data Anotations

Filed under: .net, ASP.Net, Curso C#, MVC4 — Etiquetas: , , , , , , — jnavero @ 8:51 PM

En post anteriores he comenzado con la introducción al circo del MVC de ASP.

En el post de hoy voy a hablar como pone en el titulo del Model Binders (una pequeña introducción) y veremos un ejemplo sencillo de un data Anotation personalizado.

Sin más, comenzaré este post, espero que sea del agrado.

Model Binders

El Model Binder son las peticiones que se realizan en base a la sintaxis de la url invocada, el ejemplo típico en una url de MVC sería el siguiente:

http://Dominio.com/Customer/Show/55

En esta URL podemos diferenciar 3 aspectos que son los siguientes:

Customer: Es el nombre de la clase

Show: Es la operación a realizar (una función de la clase anterior)

55: Indica una instancia concreta del modelo.

ASP MVC utiliza la clase por defecto ControllerActionInvoker para determinar como se tiene que gestionar la petición realizada.

Por otro lado, la clase del Binder por defecto se llama DefaultModelBinder y se utiliza para indicar los parámetros a pasar. Se examina la acción a ejecutar con un parámetro y se buscan valores en la petición en diferentes localidades como pueden ser formularios, Json, QueryString ect…

El Model Binder está pensado para ser extensible, podemos modificarlo o cambiarlo a placer aunque es poco frecuente ver modificaciones en esto.

Data Anotations Personalizados

Podemos crearnos un data anotation, cuando los existentes no cumplen con los requisitos que deseamos, como por ejemplo una validación.

Para crearnos el data anotation, debemos heredar de la clase ValidationAttribute, el constructor es obligatorio.

Con el atributo AttributeUsage determina el tipo de elemento que se redifine el target al que va dirigido y con el método IsValid validamos el atributo…

Por ultimo indicar que la clase que creemos para nuestro data anotation debe terminar en Attribute, es decir CustomValidationDataAttribute por poner un ejemplo.

Como es mucha literatura, lo voy a poner en un ejemplo ya que es mas sencillo de lo que parece 🙂


//Esta clase comprueba que el dato introducido no es blando. (Ya existe el atributo required pero, para el ejemplo nos va bien).
[AttributeUsage(AttributeTargets.Property)]
public class CustomValidationDataAttribute : ValidationAttribute
{
//Podemos usar varios contrustores para pasarle parametros que posteriormente podemos usar.
public CustomValidationDataAttribute()
{
}
public override bool IsValid(object value)
{
return !String.IsNullOrEmpty((string)value);
}
}

Como el target que hemos seleccionado es una propiedad, debemos ir a nuestra propiedad y agregarle el atributo que hemos creado de esta forma:


public class Example
{
[CustomValidationData]
public string Name { get; set; }
}

Esto puede acabar repercutiendo en la vista. un ejemplo sencillo de ver de un atributo que repercute en la vista sería esto:


public class LocalPasswordModel
{
[Required]
[DataType(DataType.Password)]
[Display(Name = "Contraseña actual")]
public string OldPassword { get; set; }

[Required]
[StringLength(100, ErrorMessage = "El número de caracteres de {0} debe ser al menos {2}.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Nueva contraseña")]
public string NewPassword { get; set; }

[DataType(DataType.Password)]
[Display(Name = "Confirmar la nueva contraseña")]
[Compare("NewPassword", ErrorMessage = "La nueva contraseña y la contraseña de confirmación no coinciden.")]
public string ConfirmPassword { get; set; }
}

Este trozo de código está cogido del ejemplo de MVC que viene instalado en Visual Studio.

En la vista podemos ver esto:

DataAnotation

Ese mensaje de validación se debe al data Anotation visto en la clase anterior.

Espero que quede claro con estos ejemplos que hemos visto.

Como el post me ha quedado un poco largo, voy a crear uno nuevo muy pequeño en el que hablaré del Model Binder personalizado para posteriormente, meterme un poco en el modelo.

Esto es todo por hoy. Saludos!

Anuncios

Dejar un comentario »

Aún no hay comentarios.

RSS feed for comments on this post. TrackBack URI

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: