Я новичок в .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 - нет. Нет ошибок, ничего. Есть идеи?? Помощь очень ценится.
Шахид