7
votes

Validation ASP.NET MVC - champs dépendants

J'essaie actuellement de travailler à travers la validation MVC et je suis à la hauteur de certains problèmes dans lesquels un champ est requis en fonction de la valeur d'un autre champ. Un exemple est ci-dessous (que je n'ai pas encore compris) - si le mode de paiement == «Vérifiez», le nom de CHEquename doit être requis, sinon cela peut être laissé à travers. xxx

J'utilise le système.componentmodel.dataannotations pour le [Obligatoire] et j'ai également étendu un validationAttributeur pour essayer de commencer ce travail, mais je ne peux pas passer une variable à travers Faire la validation (extension ci-dessous) xxx

implémentation: xxx

a-t-il eu une expérience avec ce type de validation? Serait-il juste mieux d'écrire dans le contrôleur?

Merci pour votre aide.


2 commentaires

À la deuxième pensée ... Comment pouvez-vous définir les paiements sélectionnés = PaymentMethod? Vous devriez avoir une erreur parce que PaymentMethod n'est pas une expression constante.


Salut min, tu as raison. Je pensais que je pourrais être capable de le faire de cette façon, mais cela ne fonctionne pas. Je voulais juste montrer ce que j'avais essayé, mais aussi a commenté que cela ne me permettrait pas de passer à travers la variable.


4 Réponses :


3
votes

J'écrirais la logique de validation dans le modèle, pas le contrôleur. Le contrôleur doit uniquement gérer l'interaction entre la vue et le modèle. Puisque c'est le modèle qui nécessite une validation, je pense qu'il est largement considéré comme le lieu de la logique de validation.

Pour validation qui dépend de la valeur d'une autre propriété ou de champ, je ne vois pas comment éviter complètement comment écrire Code de celui-ci dans le modèle, tel que représenté dans le livre Wrox ASP.NET MVC, en quelque sorte comme: xxx

faisant toute la validation de déclaration serait excellente. Je suis sûr que vous pourriez faire un requisdépendentAttribute , mais cela ne gérerait que ce type de logique. Des choses qui sont même légèrement plus complexes nécessiteraient un autre attribut assez spécifique, etc. qui devient fou rapidement.


1 commentaires

Merci Djuth, j'ai pris une modélisation et une validation faite avec ceci dans le modèle, puis retournez le dictionnaire au contrôleur pour fusionner dans le modèle de modèle. Semble faire le tour et me permet de faire du travail programmatique - pas tout à fait aussi agréable que ce soit juste faire une déclaration par attribut, mais au moins je peux tout obtenir à un endroit unique. Je ne sais pas comment cela ira s'il y a plus d'une erreur par attribut tho.



3
votes

Votre problème peut être résolu relativement simplement par l'utilisation de attribut de validation conditionnelle par exemple xxx < / pré>


0 commentaires

5
votes

Si vous souhaitez une validation du côté client, en plus de la validation du modèle sur le serveur, je pense que la meilleure façon de partir est un attribut de validation personnalisé (comme Jaroslaw suggéré). J'inclus la source d'ici de celui que j'utilise.

Attribut personnalisé: P>

[Required]
public bool IsEmailGiftCertificate { get; set; }

[RequiredIf("IsEmailGiftCertificate", true, ErrorMessage = "Please provide Your Email.")]
public string YourEmail { get; set; }


1 commentaires

Je me rends compte que cette réponse a 2 ans, mais j'essaie d'obtenir cela pour travailler et essentiellement, il incendie la validation sur la propriété dépendante, quelle que soit la valeur de la première propriété. Toute aide serait appréciée.



4
votes

Utilisez simplement la bibliothèque de validation infroissante qui est disponible sur CodePlex: https://foolwof.Codeplex.com/

Il prend en charge les attributs de validation "obligatoires" suivants : xxx

pour commencer est facile:

  1. Téléchargez le colis du lien fourni
  2. Ajoutez une référence au fichier .dll inclus
  3. Importer les fichiers JavaScript inclus
  4. Assurez-vous que vos vues se réfèrent aux fichiers JavaScript inclus de son HTML pour une validation JavaScript et JQuery non accidentées.

0 commentaires