Удаленная проверка для проверки электронной почты в MVC - PullRequest
0 голосов
/ 25 декабря 2018

Я использую удаленную проверку для проверки, если электронная почта уже существует в базе данных, но она не работает, вот код:

Свойство модели

[Remote("IsAlreadyUserExist", "User", HttpMethod = "POST", ErrorMessage = "Email Already Exists.")]
public string Email { get; set; }

Контроллер

[HttpPost]
public JsonResult IsAlreadyUserExist(string Email)
{

    return Json(IsUserExist(Email));

}

public bool IsUserExist(string Email)
{      
    List<UserProfile> userlist = userRepo.GetUserList();
    var UserEmailId = (from u in userlist
                      where u.Email.ToUpper() == Email.ToUpper()
                      select new { Email }).FirstOrDefault();

    bool status;
    if (UserEmailId != null)
    {
        //Already registered  
        status = false;
    }
    else
    {
        //Available to use  
        status = true;
    }
    return status;
}

Я добавил этот js в свое представление Create внизу.

<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>

Я также попытался включить отладчик в функцию IsAlreadyUserExist, но он там не срабатывает.

Anyидея в чем может быть проблема?

1 Ответ

0 голосов
/ 25 декабря 2018

Чтобы заставить 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);
}

Примечание: я не видел ваш код репозитория, поэтому я показал здесь обобщенное представление о том, как это должно быть,Используйте все в соответствии со своей структурой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...