Validaciones personalizadas con Data Annotations en ASP.NET MVC

Una característica muy útil a la hora de desarrollar aplicaciones ASP.NET MVC es usar Data Annotations para hacer validaciones de campos. El framework .NET incluye a su vez algunas Data Annotations que podemos usar en nuestras aplicaciones como atributos para validar campos requeridos, longitudes de campos, validar expresiones regulares, etc. Toda la lista de atributos la puedes encontrar en la documentación del namespace System.ComponentModel.DataAnnotations. Pero aún contando con todo esto que mencionamos, puede que tengamos la necesidad de crear nuestra propia validación de formato, o validación de alguna regla dependiendo del contexto de nuestro proyecto, en fin. Pues bien, aquí es donde aprenderemos cómo crear nuestro propio atributo de validación.

En primer lugar, vamos a crear una aplicación nueva ASP.NET MVC en Visual Studio. Luego, adicionaremos una clase modelo que representa los datos de un empleado con la siguiente estructura:

public class Employee
{
    public string Name { getset; }
    public bool IsActive { getset; }        
    public string JobTitle { getset; }
}

Posteriormente, vamos a crear nuestro propio atributo de validación, para esto adicionamos una nueva clase que herede de la clase base ValidationAttribute y a esta clase le sobreescribimos el método IsValid. Nuestra “regla de negocio” será que si un empleado está activo, entonces el título de su cargo es obligatorio. El código del atributo de validación queda así finalmente:

public class CustomTitleValidator : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {            
        var employee = (Employee)validationContext.ObjectInstance;
 
        if (employee.IsActive)
        {
            if (value == null || string.IsNullOrEmpty(value.ToString()))
            {
                // Oops!
                return new ValidationResult(validationContext.DisplayName + " is required when the employee is active.");
            }                
        }
 
        // Ok!
        return ValidationResult.Success;            
    }
}

Una vez hecho, lo que tenemos que hacer es agregar el atributo que creamos a la clase modelo que adicionamos en un principio, que ahora quedaría así:

public class Employee
{
    public string Name { getset; }
 
    public bool IsActive { getset; }
 
    [CustomTitleValidator// Custom validation attribute
    public string JobTitle { getset; }
}

Y bien, lo último es probar que nuestra validación funcione. Para esto, creamos un controlador MVC con dos acciones:

public class EmployeesController : Controller
{
    public ViewResult Index()
    {
        return View(new Employee());
    }
 
    [HttpPost]
    public ViewResult Index(Employee employee)
    {
        if (ModelState.IsValid)
        {
            // ...
        }
 
        return View(employee);
    }
}

Y finalmente, debemos agregar una vista con el código de un formulario para editar los campos de nuestro modelo. El código de la vista es un poco extenso, así que no lo incluiré aquí, pero puedes encontrar el código del ejemplo al final del post y descargarlo.

Al ejecutar el sitio web, podremos hacer la prueba de nuestra “regla de negocio” y ver cómo funciona la validación!

CustomValidationAttribute01

Bien, hasta aquí con este tema, espero pueda ser útil. El código fuente del ejemplo lo puedes descargar desde mi repositorio de Github

Anuncios

One Response to Validaciones personalizadas con Data Annotations en ASP.NET MVC

  1. MaRioBoT says:

    Hola Hernan les comparto un proyecto que tengo en GitHub para implementar frameworks de front end en ASP.Net MVC https://mariobot.wordpress.com/2016/02/29/frameworks-de-front-end-en-mvc/

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: