J'ai créé un attribut de validation personnalisé par sous-classement validationAttribute. L'attribut est appliqué à mon point de vue au niveau de la classe car il doit valider plus d'une propriété.
Je suis remplace p> et retourne: p> < PRE> XXX PRE> Dans tous les cas où DateOfbirth est l'une des propriétés de mon modèle de vue. P> Quand j'exécute mon application, je peux voir que cela se fait frapper. Modelstate.isvalid est défini sur False correctement, mais lorsque j'inspecte le contenu de la modélisation, je vois que la propriété Datefbirth ne contient aucune erreur. Au lieu de cela, j'ai une touche de chaîne vide avec une valeur de NULL et une exception contenant la chaîne que j'ai spécifiée dans mon attribut de validation. P> Il n'y a pas de message d'erreur non affiché dans mon UI lors de l'utilisation de validationMessageFor. Si j'utilise validationsummary, je peux voir l'erreur. C'est parce que ce n'est pas associé à une propriété. P> Il semble que cela ignore le fait que j'ai spécifié le nom de membre dans le résultat de la validation. P> Pourquoi est-ce et comment Est-ce que je le répare? p> Exemple de code comme demandé: p>
4 Réponses :
Vous devez définir la propriété errorressage, donc par exemple:
Le message d'erreur est en cours de réglage et passe bien comme expliqué ci-dessus. Le problème est avec le nom de membre qui devrait mapper sur la clé du modèle de modèle.
Pouvez-vous publier votre code alors, cela pourrait vous faciliter l'aide
Je ne suis pas au courant d'une solution facile à résoudre ce problème. C'est l'une des raisons pour lesquelles je déteste les annotations de données. Faire la même chose avec fluentvalidation serait une paix de gâteau: fluentvalidation a de superbe support et Intégration avec ASP.NET MVC . P> P>
Merci. L'équipe MVC réutilise donc la classe ValidationResult mais ignore complètement l'une des propriétés? Dans l'ensemble, je suis extrêmement impressionné par la production de l'équipe MVC, mais c'est plutôt mauvais. Je viens de le vérifier dans mvc3 / .net4 et c'est toujours la même chose.
Bonjour tout le monde.
toujours à la recherche de solution? P>
J'ai résolu le même problème aujourd'hui. Vous devez créer un attribut de validation personnalisé qui validera 2 dates (exemple ci-dessous). Ensuite, vous avez besoin d'adaptateur (validateur) qui validera le modèle avec votre attribut personnalisé. Et la dernière chose est une adaptateur contraignante avec attribut. Peut-être qu'un exemple va l'expliquer mieux que moi :) p>
Nous allons ici: p>
datecompareattribute.cs.cs CS: p> global.asax: p> personnaliséviewModel.cs: p>
Bon travail. Dans MVC3, vous pouvez accéder à d'autres propriétés d'un attribut de niveau de propriété en utilisant la propriété validationContext.Objectstance, qui fonctionne bien pour moi. Vous pouvez voir un exemple ici: FavCode.net/Browse/.../a>
Sérieusement, c'est la solution.
Toute façon d'avoir ce côté de la clientèle de validation?
Lors du retour du résultat de validation, utilisez le constructeur de deux paramètres. Passez-le un tableau avec le contexte.Membername comme la seule valeur. J'espère que cela aide
<AttributeUsage(AttributeTargets.Property Or AttributeTargets.Field, AllowMultiple:=False)> Public Class NonNegativeAttribute Inherits ValidationAttribute Public Sub New() End Sub Protected Overrides Function IsValid(num As Object, context As ValidationContext) As ValidationResult Dim t = num.GetType() If (t.IsValueType AndAlso Not t.IsAssignableFrom(GetType(String))) Then If ((num >= 0)) Then Return ValidationResult.Success End If Return New ValidationResult(context.MemberName & " must be a positive number", New String() {context.MemberName}) End If Throw New ValidationException(t.FullName + " is not a valid type. Must be a number") End Function End Class