Creando nuestros validadores en Validation Application Block

Muchas veces nos puede pasar que necesitemos validadores que no esten implemntados en Validation Application Block. Esto no es problema ya que la arquitectura de VAB nos permite crear nuestros propios validadores. Imaginemos que queremos crear un validador para e-mails que comprobara que el string contiene el caracter @.

Para ello debemos crear una clase denominada EmailValidatorAttribute que herede de ValidatorAttribute y sobreescribir el metodo CreateValidator.

 

public sealed class EmailValidatorAttribute : ValidatorAttribute
{
	public override IValidator CreateValidator()
	{
		return new EmailValidator(this.GetMessageTemplate());
	}
} 

 

Ahora creamos la clase EmailValidator que debe heredar de ValidatorBase y sobreescribir los metodos DoValidate, en el que realizaremos la validación, y el metodo GetDefaultMessageTemplate, en el que introduciremos el mesaje por defecto.

 

       public class EmailValidator : ValidatorBase
    {
        public EmailValidator()
            : this(null)
        { } 

        public EmailValidator(string messageTemplate)
            : base(messageTemplate)
        { } 

        protected override void DoValidate(object target, ValidationResults validationResults)
        {
            try
            {
                string converted = (string)target;
                if (!converted.Contains("@"))
                {
                    this.AddResult(validationResults, new ValidationResult(this.MessageTemplate));
                }
            }
            catch
            {
                this.AddResult(validationResults, new ValidationResult(this.MessageTemplate));
            }
        } 

        protected override string GetDefaultMessageTemplate()
        {
            return "No es un email valido, no contiene el caracter @";
        }
    }

De esta manera tan sencilla creamos nuesteos propios validadores

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *