Je suis nouveau à .net MVC, mais je fais des avances. J'essaie de créer un validateur DataAnnotation personnalisé qui vérifie si une adresse e-mail est déjà enregistrée. J'utilise LINQ to SQL. Mon modèle est ci-dessous:Validation personnalisée qui vérifie si le courrier électronique existe déjà dans la base de données. AIDEZ-MOI!
// Model
public class UsersRepository
{
private DigitalentDataContext db = new DigitalentDataContext();
BaseController baseController = new BaseController();
//
// Add talent user
public void AddTalentUser(User user, TalentDetail talentDetail)
{
user.TalentDetails.Add(talentDetail);
db.Users.InsertOnSubmit(user);
db.SubmitChanges();
string activationID = user.ActivationID.ToString();
string activationEmail = user.Email;
baseController.SendConfEmail(activationID, activationEmail);
}
public IQueryable<User> GetAllUsers()
{
return db.Users;
}
}
//Validation
[MetadataType(typeof(UserValidation))]
public partial class User { }
[Bind(Exclude = "UserID")]
[ExistingEmailCheck("Email", ErrorMessage="Email address already registered")]
public class UserValidation
{
[Required(ErrorMessage = "First name required"), StringLength(20, MinimumLength=3, ErrorMessage = "Must be between 3 and 20 characters")]
public string FirstName { get; set; }
...
}
public class ExistingEmailCheckAttribute : ValidationAttribute
{
public ExistingEmailCheckAttribute(string emailToCheck) {
EmailToCheck = emailToCheck;
}
public string EmailToCheck { get; private set; }
private UsersRepository _UserRep = new UsersRepository();
public override bool IsValid(object value)
{
int existingEmailCount = _UserRep.GetAllUsers().Where(g => g.Email == EmailToCheck).Count();
return existingEmailCount == 0;
}
}
Code contrôleur:
[HttpPost]
public ActionResult Signup(User user, TalentDetail talentDetail)
{
if (ModelState.IsValid) {
user.ActivationID = System.Guid.NewGuid();
user.ActivationStatus = false;
user.DateCreated = DateTime.Now;
userRepository.AddTalentUser(user, talentDetail);
return RedirectToAction("confirm", "login");
}
return View(user);
}
Tous les autres travaillent, mais la validation ExistingEmailCheck ne fonctionne pas. Pas d'erreur, rien. Des idées?? L'aide est très appréciée.
Shahid
Que signifie "Ne semble pas fonctionner?" signifier? Cela fonctionne ou non, et si ce n'est pas le cas, qu'est-ce que cela signifie, exception, ne valide pas, ne demande pas, les points d'inflexion ne touchent pas? Quel est le code de votre contrôleur? – jfar
@Gnomo, s'il vous plaît élaborer? – shahidaltaf
L'utilisation d'un attribut pour effectuer une logique métier est vraiment mauvaise à mon avis. Vérifiez que l'adresse e-mail est unique au moment de l'insertion et lancez une exception. – Ryan