首页 > 解决方案 > 在 MVC 中检查电子邮件的远程验证

问题描述

我正在使用远程验证来检查数据库中是否已经存在电子邮件但它不起作用,这里是代码:

模型属性

[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。

<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函数中,但它没有在那里。

知道可能是什么问题吗?

标签: c#ajaxattributesremote-validation

解决方案


为了使工作,请按如下方式RemoteAttibute写下您 RemoteAttibute的财产: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);
}

注意:我没有看到您的存储库代码,所以我在这里展示了它应该如何的一般视图。根据自己的结构使用一切。


推荐阅读