Пользовательская проверка, которая проверяет, существует ли электронная почта в БД.ПОМОГИТЕ! - PullRequest
0 голосов
/ 12 августа 2010

Я новичок в .net MVC, но у меня все получается. Я пытаюсь создать собственный валидатор DataAnnotation, который проверяет, зарегистрирован ли адрес электронной почты. Я использую LINQ to SQL. Моя модель ниже:

// 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;
    }
}

Код контроллера:

[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);
    }

Все остальные проверки работают, но ExistingEmailCheck - нет. Нет ошибок, ничего. Есть идеи?? Помощь очень ценится.

Шахид

1 Ответ

0 голосов
/ 12 августа 2010

Не следует ли применять фильтр к определенному свойству вместо класса?

...