如何更新 asp.net mvc5 中的唯一电子邮件地址或其他属性



在我的 asp.net mvc5应用程序中,用户可以更新电子邮件地址或其他数据。当用户创建一个帐户时,它工作正常,但是当我更新日期时,如果电子邮件字段不变,则验证消息显示"电子邮件地址已存在"。那么我该如何解决呢?

我还需要检查电子邮件地址是否更改,然后必须检查此电子邮件是否唯一。如果不是唯一的,则用户无法更新数据和验证消息显示"电子邮件地址已存在"。

脚本

$('#UserEmail').blur(function () {
  var url = "/Account/CheckUserEmail";
  var Email = $('#UserEmail').val();
  $.get(url, { input: email }, function (data) {
    if (data == "Available") {
      $("#result").html("<span style='color:green;'>User email available</span>");
      $("#UserEmail").css('background-color', '');
    } else if (data == "Empty") {
      $("#result").html("<span> </span>");
    } else {
      $("#result").html("<span style='color:red'>User email not available</span>");
      //$("#UserEmail").css('background-color', '#e97878');
    }
  });
})

控制器

public string CheckUserEmail(string email)
{
  if (input == string.Empty)
  {
    return "Empty";
  }
  var finduser = UserManager.FindByEmail(email);
  if (finduser == null)
  {
    return "Available";
  }
  else
  {
    return "Not Available";
  }
  return "";
}

当前您正在处理 .blur() 事件,当用户按 Tab 键浏览控件不变时,该事件会不必要地触发 ajax 调用。相反,您应该处理.change()事件。 仅当文本更改且控件失去焦点时,才会触发此操作。用户仍然可以进行更改,然后返回并撤消它,以便您可以通过比较valuedefaultValue来防止调用服务器。最后,如果用户没有输入电子邮件,则调用服务器似乎没有意义。

脚本(请注意在函数外部声明的isValid变量,以便可以检查以防止提交)

var isValid = true;
$('#UserEmail').change(function () {
  var span = $('<span></span>');
  var url = '@Url.Action("CheckUserEmail", "Account")'; // don't hard code your url's
  var email = $(this).val();
  if(!email) { // assume an email address is required
    isValid = false;
    span.text('Please enter an email address');
  } else if (email == $(this)[0].defaultValue) { // nothing has changed so OK      
    isValid = true;
  } else { // call server to validate
    $.get(url, { input: email }, function (data) {
      isValid = data;
      if (!isValid) {
        span.text('User email not available');
      }
    });
  }
  if(isValid) { 
    span.css('color', 'green'); // better to use class names
  } else {
    span.css('color', 'red');
  }
  $("#result").html(span);
});

控制器

public JsonResult CheckUserEmail(string email)
{
  return Json(UserManager.FindByEmail(email) == null, JsonRequestBehavior.AllowGet);
}

然而,所有这些都相当脆弱,并不能阻止表格的提交。我建议使用 jquery 不显眼的验证以及用于检查现有电子邮件是否存在的RemoteAttribute,以及用于确保它是有效电子邮件地址的RequiredEmailAttribute,然后在视图中使用 @Html.ValidationMessageFor()

最新更新