Чтобы заставить RemoteAttibute
работать, напишите ваше свойство RemoteAttibute
on Email
следующим образом:
[Required]
[StringLength(30)]
[Index("Ix_Email",Order =1,IsUnique =true)]
[Remote("IsUserAlreadyExists", "User", AdditionalFields = "Id", ErrorMessage = "User already exists with the provided email")]
public string Email { get; set; }
Вы извлекаете всех пользователей из базы данных в памяти только для того, чтобы проверить, является ли пользователь ужесуществует с определенной электронной почтой, что очень и очень плохо с точки зрения производительности.Поэтому напишите IsUserAlreadyExists
метод в UserController
следующим образом:
public JsonResult IsUserAlreadyExists(string Email, int? Id)
{
var isUserAlreadyExists = db.Users.Any(x => x.Email== Email && x.Id != Id);
return Json(!isUserAlreadyExists, JsonRequestBehavior.AllowGet);
}
Теперь, если вы хотите переместить код доступа к базе данных на UserRepository
, сделайте это следующим образом:
public class UserRepository
{
YourDbContext dbContext = new YourDbContext();
public bool IsUserAlreadyExistsByEmail(string email, int? id)
{
return dbContext.Users.Any(x => x.Email== Email && x.Id != Id);
}
}
Затем вызовите метод IsUserAlreadyExistsByEmail
для UserRepository
следующим образом:
public JsonResult IsUserAlreadyExists(string Email, int? Id)
{
var isUserAlreadyExists = userRepo.IsUserAlreadyExistsByEmail(Email,Id);
return Json(!isUserAlreadyExists, JsonRequestBehavior.AllowGet);
}
Примечание: я не видел ваш код репозитория, поэтому я показал здесь обобщенное представление о том, как это должно быть,Используйте все в соответствии со своей структурой.