2010-05-25 9 views
0

Je veux écrire un ValidationAttribute personnalisé qui vérifie si la valeur donnée est unique ou non.Attribut de validation uniquement lorsque la valeur est modifiée?

Le problème est que dans l'écran d'édition, il n'est pas garanti que l'utilisateur a réellement changé la valeur, ce qui entraîne une erreur erronée.

Existe-t-il un moyen de vérifier dans mon attribut si la valeur a réellement changé? Ou puis-je déclencher l'attribut uniquement lorsque la valeur a changé?

J'ai l'impression que cette exigence n'appartient peut-être pas à un attribut?

+0

Les deux premières phrases ne sont pas sympas. Pourriez-vous préciser ce que l'unicité a à voir avec le suivi des changements? – jfar

+1

Ce qu'il dit, c'est que si pour l'utilisateur un l'adresse email est [email protected] et que l'utilisateur met à jour son profil, il veut vérifier que l'adresse e-mail (exemple à titre d'exemple) est toujours unique. Cependant, si l'utilisateur n'a pas modifié son adresse e-mail, sa vérification unique échouera car [email protected] est déjà dans la base de données pour l'utilisateur en cours de mise à jour. – Tommy

Répondre

1

Quand vous dites ValidationAttibute, voulez-vous dire utiliser DataAnnotations? Si oui, alors tout cela s'applique, sinon, désolé, j'ai mal compris et seulement une partie de cette volonté.

Je pense que votre meilleur pari est de le faire dans le référentiel ou BLL en utilisant votre clé unique pour l'enregistrement, au moins c'est comme ça que je l'ai fait. Récupère les valeurs précédentes de l'enregistrement et vérifie si elles ont changé. Si elles ont changé, exécutez vos vérifications d'unicité.

Si vous pouvez obtenir cette logique dans le ValidationAttribute, alors plus de puissance à vous, mais je ne suis pas sûr si unAttribut de validation serait la meilleure chose puisqu'il y a des moyens de les contourner. De ma compréhension de ces attributs, vous devez les utiliser uniquement comme compléments aux validations de logique métier et non comme la seule façon de valider votre modèle.

See here for more info on DataAnnotations

EDIT: assez juste, nous allons voir maintenant si je peux donner une réponse à vous aider :) Consultez ce lien, il est le code de vérification de l'unicité sur une propriété dans une table. LINQ à SQL assez approfondi, mais il semble que cela fonctionne bien. Vous devriez pouvoir décorer n'importe quelle propriété avec ceci juste comme utilisant les attributs <Required> ou <StringLenght>.

ASP.NET Forums

+0

La vérification unique est également appliquée sur le modèle, mais je voulais en faire un attribut (ou une annotation de données) afin de tirer parti de la vérification automatique du client et d'avoir mes règles métier en un seul endroit. –