在我的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 "";
}
答案 0 :(得分:0)
目前您正在处理.blur()
事件,当用户通过控件更改时,会不必要地触发您的ajax调用。相反,您应该处理.change()
事件。仅在文本更改且控件失去焦点时才会触发此操作。用户仍然可以进行更改,然后返回并撤消它,以便通过比较value
和defaultValue
来阻止调用服务器。最后,如果用户没有输入电子邮件,则无需调用服务器。
脚本(注意在函数外部声明的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
检查现有电子邮件是否存在,Required
和EmailAttribute
确保其有效的电子邮件地址,然后使用{{1}在视图中。