2011-12-20 11 views
11

Estoy tratando de usar IValidatableObject para validar valores de formulario uno con respecto al otro. Me gustaría asignar un ValidationResult a un campo específico para que pueda mostrar un mensaje de error junto a ese campo.Asignar ValidationResult al campo específico?

Por ejemplo, deseo que los usuarios ingresen contraseñas dos veces, y que la validación falle si la 2a no es igual a la primera, y luego mostrar el mensaje de error junto a la segunda.

Sin embargo, parece que solo puedo asignar errores a nivel de modelo de esta manera; por nivel de modelo me refiero a un error que se mostrará con @Html.ValidationSummary(true), y que no está vinculado a un campo de modelo específico.

He examinado la declaración de ValidationResult, y no veo ninguna propiedad o método que parezca útil para esto. Entonces, ¿alguien puede mostrarme una forma de asignar un ValidationResult a un campo específico desde dentro de un método Validate de un IValidateableObject, o confirmar que NO es posible hacerlo?

(NOTA: NO estoy buscando una solución temporal. POR FAVOR, no hay respuestas sobre, por ejemplo, filtros que tengan en cuenta el ejemplo de contraseña. Solo quiero saber específicamente sobre los límites de IValidateObject.)

Respuesta

23

Es posible, ValidationResult tiene una sobrecarga que acepta IEnumarable de cadena, propiedades que se asociarán.

Un ejemplo.

 public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
    { 
     if (Password != PasswordConfirmation) 
      yield return new ValidationResult("Password confirmation must match", new[] { "PasswordConfirmation" }); 
    } 
+1

Sí! Acababa de encontrar esto, y estaba a punto de publicar como mi propia respuesta – Faust

Cuestiones relacionadas