2010-08-18 4 views
3

Est-ce que l'ajout et la suppression de DataAnnotations, en particulier le [requried], est nécessaire pour le code? Mon problème est que je veux donner à l'utilisateur la possibilité d'enregistrer un formulaire incomplet dans nos applications CRUD mais en même temps utiliser la puissance de la validation DataAnnotations.Ajout et suppression d'annotations de données à partir du code

Si ce n'est pas possible, quelle est la meilleure façon de procéder?

Répondre

0

Il est impossible d'ajouter, supprimer ou modifier dynamiquement DataAnnotations car ils sont des attributs. Les attributs font partie du type et ne peuvent pas être modifiés pendant l'exécution.

Vous pouvez utiliser ModelState comme condition que Larsenal ont suggéré de:

  • vous l'utiliser après la validation a exécuté. (avant cela, ModelState sera vide.Il ne donne pas accès à tous les validateurs, il ne stocke que les erreurs de validation après qu'ils se sont produits)
  • vous n'avez aucune validation client basée sur les DataAnnotationValidators et les incendies les erreurs qui vous empêchent d'atteindre la validation côté serveur.
2

Vous pouvez conserver les attributs DataAnnotation sur votre modèle, puis effacer manuellement les erreurs de validation, le cas échéant, à partir du code. Il pourrait ressembler à ceci:

if (certainCondition == true) { 
    ModelState["someKey"].Errors.Clear(); 
    ModelState["anotherKey"].Errors.Clear(); 
} 
+0

Ici, vous ne supprimez pas la DataAnnotation mais effacez juste les ModelErrors. Le problème avec ceci est qu'il supprime toutes les erreurs et pas un particulier. Par exemple, dites "someKey" est à la fois nécessaire et a une restriction de longueur. En courant clair, vous perdez les deux. Si vous avez cette restriction de longueur parce que votre db a une restriction sur la longueur du champ, alors vous perdrez des données sur save si vous essayez d'enregistrer. Cela fonctionnerait cependant, si vous pouviez supprimer juste sélectionner des erreurs. – Scott

+0

Bien que je ne l'ai pas fait personnellement, je crois que vous pouvez supprimer les erreurs individuelles pour n'importe quelle clé. Dans votre exemple, pourquoi ne pas avoir un attribut StringLength? Si vous souhaitez que les utilisateurs puissent enregistrer un formulaire "incomplet", dans quel sens les champs "Obligatoire" sont-ils remplis? Est-ce vraiment juste une règle commerciale qui dit que l'entrée n'est pas "complète" à moins que certains champs ne soient remplis? – Larsenal

Questions connexes