¿Cómo podría escribir un ValidationAttribute personalizado que compare dos campos? Este es el escenario común de "ingresar contraseña", "confirmar contraseña". Necesito estar seguro de que los dos campos son iguales y para mantener las cosas consistentes, quiero implementar la validación mediante DataAnnotations.Usando DataAnnotations para comparar dos propiedades del modelo
Así que en pseudo-código, estoy buscando una manera de implementar algo como lo siguiente:
public class SignUpModel
{
[Required]
[Display(Name = "Password")]
public string Password { get; set; }
[Required]
[Display(Name = "Re-type Password")]
[Compare(CompareField = Password, ErrorMessage = "Passwords do not match")]
public string PasswordConfirm { get; set; }
}
public class CompareAttribute : ValidationAttribute
{
public CompareAttribute(object propertyToCompare)
{
// ??
}
public override bool IsValid(object value)
{
// ??
}
}
Entonces la pregunta es, ¿cómo codificar los [Comparar] ValidationAttribute?
En este caso, puede ahorrarse el atributo requerido para la segunda propiedad puesto que ya están haciendo cumplir una comparación con la primera propiedad que es de hecho requerida. –
Tenga en cuenta que, a partir de C# 6.0, ahora es posible utilizar la palabra clave 'nameof', en lugar de utilizar" cadenas mágicas "como nombres de propiedad.Esto permite una refactorización mejor/más fácil de cualquier propiedad relacionada, ya que usa el nombre de propiedad fuertemente tipado (y le ahorra tener que recordar actualizar la cadena mágica (como he hecho algunas veces)). Además, el compilador cometerá un error si alguna vez se le pasó, de alguna manera, haciéndolo "infalible". Ejemplo de uso según la respuesta de @Janx: '[CompareAttribute (nameof (NewPassword), ErrorMessage =" Las contraseñas no coinciden. ")]' –