Après avoir créé mon propre attribut de validation dérivé de System.ComponentModel.DataAnnotations.ValidationAttribute, je souhaite pouvoir détecter à partir de mon contrôleur si cet attribut spécifique était valide ou non sur le modèle.Détection de la validité ou non d'un attribut spécifique sur le modèle
Ma configuration:
public class MyModel
{
[Required]
[CustomValidation]
[SomeOtherValidation]
public string SomeProperty { get; set; }
}
public class CustomValidationAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
// Custom validation logic here
}
}
Maintenant, comment puis-je détecter du contrôleur si la validation de CustomValidationAttribute a réussi ou non?
J'ai regardé la propriété Exception de ModelError dans ModelState, mais je n'ai aucun moyen d'ajouter une exception personnalisée à partir de mon CustomValidationAttribute.
En ce moment, j'ai eu recours à la vérification d'un message d'erreur spécifique dans le ModelState:
public ActionResult PostModel(MyModel model)
{
if(ModelState.Where(i => i.Value.Errors.Where((e => e.ErrorMessage == CustomValidationAttribute.SharedMessage)).Any()).Any())
DoSomeCustomStuff();
// The rest of the action here
}
Et changé CustomValidationAttribute à:
public class CustomValidationAttribute : ValidationAttribute
{
public static string SharedMessage = "CustomValidationAttribute error";
public override bool IsValid(object value)
{
ErrorMessage = SharedMessage;
// Custom validation logic here
}
}
Je n'aime pas compter sur la correspondance de chaîne, et de cette façon la propriété ErrorMessage est un peu mal utilisée.
Quelles sont mes options?
Hmm, je ne vois pas comment cela fonctionnerait avec la liaison de modèles. L'exception se produirait avant que l'action soit invoquée. Je ne sais pas non plus si c'est une bonne idée de baser simplement le design sur les exceptions de lancement dans la méthode CustomValidationAttribute.IsValid. Je veux dire, si ce que je valide avec n'est pas valide, je devrais simplement retourner faux. –