ASP.NET MVC validation de l'unicité
Rails a un très bon caractère unique de validation.
ASP.NET MVC n'est pas.
J'ai besoin pour vous assurer que l'adresse e-mail d'un utilisateur a entré n'a pas été enregistré par n'importe qui encore.
Je ne peux voir qu'une seule façon de faire ce type de validation: créer un nouvel objet de contexte de données dans le UniqueAttribute classe.
Mais j'ai peur que le gaspillage de mémoire sur un nouvel objet de contexte de données juste pour une validation est dangereux.
Ai-je tort? Est-il une meilleure façon de le faire?
Mise à jour
C'est ce que j'ai obtenu jusqu'à présent
public class UniqueEmailAttribute : ValidationAttribute {
public override bool IsValid(object value) {
DataContext db = new DataContext();
var userWithTheSameEmail = db.Users.SingleOrDefault(
u => u.Email == (string)value);
return userWithTheSameEmail == null;
}
}
//Usage
[UniqueEmail(ErrorMessage="This e-mail is already registered")]
public string Email { get; set; }
Il y a deux problèmes.
- Il serait bon d'avoir un seul UniqueAttribute de la classe, pas des classes séparées pour les e-mails, noms d'utilisateur, etc. Comment puis-je le faire?
- La création d'un nouveau contexte de données chaque fois que vous devrez valider un seul attribut.
SOLUTION
Donc en fin de compte, j'ai créé une contrainte unique sur la table, et maintenant j'ai juste à intercepter SqlException dans Utilisateurs du référentiel. Fonctionne très bien et est probablement plus efficace que la recherche de la même nœud dans l'ensemble de la table. Merci!
source d'informationauteur Alex
Vous devez vous connecter pour publier un commentaire.
Un moyen infaillible de le faire est de créer un attribut validation qui permettrait d'interroger la base de données pour l'adresse e-mail. Il serait certainement ajouter de la latence.
Une alternative serait de créer une contrainte unique sur la table et d'intercepter les SqlException.
Mvc 3 Relaease candidat a de nouveaux de Nouveaux Attributs de Validation comme un remotevalidation -où vous pouvez enregistrer une méthode pour la validation côté client(jquery).
voir exemple ci-dessous-
RemoteAttribute
La nouvelle RemoteAttribute validation de l'attribut prend avantage de jQuery Validation du plug-in à distance du programme de validation, ce qui permet la validation côté client pour appeler une méthode sur le serveur qui exécute le véritable logique de validation.
Dans l'exemple suivant, le nom d'utilisateur de la propriété a la RemoteAttribute appliquée. Lors de l'édition de cette propriété dans la vue modification du client à la validation de l'appel d'une action nommée UserNameAvailable sur le UsersController classe afin de valider ce domaine.
L'exemple suivant montre le contrôleur correspondant.
Mvc 3
Mise à JOUR
ASP.Net dispose d'une fonctionnalité qui permet de vérifier automatiquement l'unicité d'une adresse électronique de l'utilisateur lorsqu'un utilisateur s'enregistre. C'est le ASP.Net le service aux Membres et vous pouvez l'utiliser pour faire ce que vous voulez même si vous n'utilisez pas toutes les caractéristiques de celui-ci.
Si vous n'êtes pas à l'aide de l'ensemble des Membres de la fonctionnalité dans votre application MVC, puis tout ce que vous devez faire est d'utiliser
Si toutes les valeurs de revenir, vous savez que l'adresse n'est pas unique. Si vous utilisez le service aux Membres pour créer des utilisateurs, puis le service des Membres va vérifier AUTOMATIQUEMENT et retourner un code pour vous si l'adresse électronique de l'utilisateur n'est pas unique.
Le service des Membres se trouve dans le Système.Web.Zone de sécurité de sorte que vous aurait besoin d'un
de référence dans votre contrôleur.
Voici un exemple
J'espère que cela aide!
La bonne façon de faire un générique à distance unique validateur MVC peut être trouvé dans cette MVC forum. par counsellorben. Il est basé sur mon MVC unique à distance du programme de validation de l'article http://msdn.microsoft.com/en-us/library/gg508808(SV.98).aspx