76 votes

Attribut de validation conditionnelle RequiredIf

Je cherchais des conseils sur la meilleure façon de mettre en œuvre un attribut de validation qui fait ce qui suit.

Modèle

 public class MyInputModel 
{
    [Required]
    public int Id {get;set;}

    public string MyProperty1 {get;set;}
    public string MyProperty2 {get;set;}
    public bool MyProperty3 {get;set;}

}

Je veux avoir au moins prop1 prop2 prop3 avec une valeur et si prop3 est la seule valeur remplie, elle ne devrait pas être égale à false. Comment pourrais-je écrire un ou plusieurs attributs de validation pour cela ?

Merci pour toute aide!

10voto

Darin Dimitrov Points 528142

Vous pouvez consulter le billet de blog suivant pour un exemple d'implémentation d'un attribut de validation personnalisé [RequiredIf] Il se compare à une seule autre valeur de propriété, mais vous pouvez facilement modifier la IsValid pour répondre à vos besoins.

2voto

Si vous essayez d'utiliser "ModelState.Remove" ou "ModelState["Prop"].Errors.Clear()", le "ModelState.IsValid" renvoie toujours false.

Pourquoi ne pas simplement supprimer l'annotation "Required" par défaut du modèle et effectuer votre validation personnalisée avant l'action "ModelState.IsValid" sur le contrôleur "Post" ? Comme ça:

 if (!String.IsNullOrEmpty(yourClass.Property1) && String.IsNullOrEmpty(yourClass.dependantProperty))            
            ModelState.AddModelError("dependantProperty", "It´s necessary to select some 'dependant'.");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X