miércoles, 2 de mayo de 2012

ASP.NET MVC4 Validando que dos campos sean iguales

Algo muy típico en el registro de usuarios es tener que introducir la contraseña dos veces para asegurarnos que la contraseña introducida es la misma. Lo normal sería poner esta validación como un DataAnnotation en la clase modelo con la que trabaje nuestra vista. Lo que vendría a ser algo así

Modelo
using System.ComponentModel.DataAnnotations;

public class IndexModel
{
  [Required(ErrorMessage = "La constraseña es obligatoria")]
  public string Password { get; set; }
  public string ConfirmPassword { get; set; }
}
Vista
@using (Html.BeginForm())
{
  <div class="editor-label">
    <label>Password</label>
    @Html.TextBoxFor(m => m.Password)
    @Html.ValidationMessage("Password")
  </div>
  <div class="editor-label">
    <label>Confirm password</label>
    @Html.TextBoxFor(m => m.ConfirmPassword)
    @Html.ValidationMessage("ConfirmPassword")
  </div>
  <input type="submit" value="Submit" />
}
Como vemos es un modelo muy simple en el que la contraseña es obligatoria y en el que tenemos que validar que ambas contraseñas introducidas sean iguales. Pues bien, lo primero que hice fue mirar en los DataAnnotations si había algún modificador para lo que yo estaba buscando, y cual fue mi sorpresa al ver que no había nada.

Lo siguiente que se me ocurrió fue hacer un validador personalizado, pero tras mirar como se hace me pareció que esto era demasiado complicado para lo que yo quería hacer y que seguro que algo tenía que haber en el framework para resolverlo.

Tras mucho indagar logré encontrarlo y en atributo en concreto se llama Compare (que original), pero en vez de estar definiddo en el namespace System.ComponentModel.DataAnnotations está definido en el namespace System.Web.Mvc. Así que nuevo modelo quedaría definido de la siguiente manera
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;

public class IndexModel
{
  [Required(ErrorMessage = "La constraseña es obligatoria")]
  [Compare("ConfirmPassword", ErrorMessage = "Las constraseñas no son iguales")]
  public string Password { get; set; }
  public string ConfirmPassword { get; set; }
}
Mucho más simple que hacer nosotros el validador.
Happy coding!


No hay comentarios:

Publicar un comentario