attribut dépend d'un autre domaine
Dans un modèle de mon ASP.NET application MVC je voudrais valider une zone de texte que nécessaire uniquement si une case est cochée.
Quelque chose comme
public bool retired {get, set};
[RequiredIf("retired",true)]
public string retirementAge {get, set};
Comment puis-je le faire?
Merci.
[RequiredIf("retired == true")]
, plus d'infos ici
Vous devez vous connecter pour publier un commentaire.
Prendre un coup d'oeil à ceci: http://blogs.msdn.com/b/simonince/archive/2010/06/04/conditional-validation-in-mvc.aspx
J'ai modded le code un peu en fonction de mes besoins. Peut-être que vous tirer parti de ces changements.
Puis l'utiliser:
ModelMetadata.FromLambdaExpression(ex, html.ViewData).IsRequired
est toujours de retourfalse
même pensé que les tributaires de la propriété est true/falseif
après// compare the value against the target value
devrait plutôt lire(value == null && Attribute.Value == null)
que la première partie de la condition. (changement!=
à==
)Suffit d'utiliser la toute épreuve de la validation de la bibliothèque qui est disponible sur Codeplex:
https://foolproof.codeplex.com/
Il soutient, entre autres, les suivants "requiredif" attributs de validation /décorations:
Pour commencer, c'est facile:
À l'aide de Gestionnaire de Package NuGet j'ai installé ceci: https://github.com/jwaliszko/ExpressiveAnnotations
Et c'est mon Modèle:
Je vous garantis que cela va fonctionner!
Je n'ai pas vu quoi que ce soit hors de la zone qui vous permettra de le faire.
J'ai créé une classe pour vous à utiliser, c'est un peu rude et certainement pas la souplesse.. mais je pense qu'il peut résoudre votre problème actuel. Ou au moins vous mettre sur la bonne piste.
Au-dessus de votre Modèle de classe, vous devriez juste besoin d'ajouter:
De votre point de Vue
Devrait afficher le message d'erreur à chaque fois que le retraité de la propriété est vraie et que la propriété est vide.
Espère que cette aide.
Tenter ma personnalisé la validation de l'attribut:
Il prend en charge de multiples conditions.
ExpressionParser.Parse()
méthode qui prend 1 argument, mais vous appelez une 2-l'argument de la version.