[ASP.NET MVC] Creando atributos de validación

Posted on Actualizado enn


Como vimos en un post anterior, cuando se trabaja con ASP.NET MVC podemos definir reglas directamente en el modelo utilizando Data Annotations (mira el post acá), sin embargo, es posible que necesitemos crear reglas adicionales para nuestros objetos de negocio, y realmente ASP.NET MVC nos facilita la vida para hacerlo.

La idea es que vamos a crear un nuevo atributo el cual nos va a permitir definir la seguridad de una contraseña, por lo tanto cuando decoremos una propiedad con el atributo nuevo le vamos a pasar un valor que indique el tipo de fuerza de la contraseña, así que manos a la obra:

Lo primero que debemos hacer es crear una clase que herede de ValidationAtribute:

public class PasswordStrongAttribute : ValidationAttribute {}

Una vez definida la clase, crearemos una enumeración para poder definir la fuerza requerida para la contraseña:

public enum TipoPassword
{
	Debil,
	Medio,
	Fuerte
};

private TipoPassword _tipoPassword;

Ahora, vamos a definir el constructor de la clase, y lo importante es que se defina un parámetro que reciba el tipo del password:

public PasswordStrongAttribute(TipoPassword tipo)
{
	_tipoPassword = tipo;
}

Lo siguiente es sobre escribir la función ValidationResult y allí se tendrá la lógica de validación del password:

protected  override ValidationResult IsValid( object  value, ValidationContext validationContext)
{
    if ( value !=  null)
    {
        var pass =  value.ToString();
		var passLength = pass.Length;
        switch (_tipoPassword)
        {
            case TipoPassword.Debil:
                if (passLength > 4 & passLength <= 6)
                    return ValidationResult.Success;
                    break;
            case TipoPassword.Medio:
                if (passLength > 6 & passLength <= 10)
                    return ValidationResult.Success;
                    break;
            case TipoPassword.Fuerte:
                if (passLength > 10)
                    return ValidationResult.Success;
                    break;
        }
    }
    return  new ValidationResult("El password no cumple el formato requerido.");
}

Finalmente solo resta adicionarlo en alguna clase de modelo (línea 24 y 25):

public  class Cliente
{
    public  int ClienteId { get; set; }
 
    [Required(ErrorMessage =  "El nombre es requerido")]
    [Display(Name =  "Nombre Completo", Description =  "xxxxx")]
    public  string Nombre { get; set; }
 
    [Required(ErrorMessage =  "El apellido es requerido")]
    public  string Apellido { get; set; }
   
    [Required(ErrorMessage =  "El email es requerido")]
    [EmailAddress(ErrorMessage =  "El email no tiene el formato correcto")]
    public  string Email { get; set; }
    
    [Required(ErrorMessage =  "La edad es requerida")]
    [Range(12, 50, ErrorMessage =  "La edad debe estar entre los 12 y los 50 años")]
    public  int Edad { get; set; }
      
    [Required(ErrorMessage =  "El sitio Web es requerido")]
    [Url(ErrorMessage =  "La dirección del sitio Web no es válida")]
    public  string SitioWeb { get; set; }
      
    [PasswordStrong(PasswordStrongAttribute.TipoPassword.Fuerte)]
    public  string Clave { get; set; }
}

Ahora, tenemos el siguiente controlador (sencillo, solo para mostrar si realmente la validación funciona o no):

public class ClienteController : Controller
	public ActionResult Index()
    {   
		return View();
    }   
    
	[HttpGet]   
	public ActionResult Create()
    {  
		return View();
    }
	
    [HttpPost]  
	public ActionResult Create(Cliente client)
    {  
	    var state = ModelState.IsValid;
       return View();  
	}
}

Ahora, cuando ingresamos datos en el formulario de creación, si se ingresa un valor para la contraseña que no cumple los requisitos lo que obtendremos es el mensaje de error:

image

y si revisamos la acción Create (post):

image

Como hemos visto, realmente es muy sencillo poder crear nuestros propios atributos de validación y así poder reutilizarlos en nuestras clases de negocio.

Espero les haya gustado el post, les dejo el ejemplo!

Descarga el ejemplo!

2 comentarios sobre “[ASP.NET MVC] Creando atributos de validación

    […] [ASP.NET MVC] Creando atributos de validación […]

    Resumen Post 2012 « Todo en ASP.NET escribió:
    12/19/2012 en 22:06

    […] [ASP.NET MVC] Creando atributos de validación […]

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