【发布时间】:2017-10-09 02:13:55
【问题描述】:
使用 ASP.NET MVC.. 我可以执行服务器端检查以查看用户提交的电子邮件地址是否已存在于我的数据库中:
if (db.TableName.Any(x => x.Email.Equals(object.Email, StringComparison.CurrentCultureIgnoreCase) && x.ID != object.ID))
{
ModelState.AddModelError("Email", "This email already exists!");
return View(object);
}
如果这是真的,那么我可以将模型返回到视图中,并且电子邮件字段将突出显示为红色,并在其下方显示验证消息。
但到目前为止,我正在使用 api 控制器并通过 ajax 调用该控制器方法。
var settings = {};
settings.baseUri = '@Request.ApplicationPath';
var infoGetUrl = "";
if (settings.baseUri === "/ProjectName") {
infoGetUrl = settings.baseUri + "/api/controllername/";
} else {
infoGetUrl = settings.baseUri + "api/controllername/";
}
$("#Create-Btn").on("click",
function (e) {
$("form").validate({
submitHandler: function () {
e.preventDefault();
$.ajax({
method: "POST",
url: infoGetUrl,
data: $("form").serialize(),
success: function (data) {
toastr.options = {
onHidden: function () {
window.location.href = newUrl;
},
timeOut: 3000
}
toastr.success("Successfully created.");
},
error: function (jqXHR, textStatus, errorThrown) {
var status = capitalizeFirstLetter(textStatus);
var error = $.parseJSON(jqXHR.responseText);
toastr.error(status + " - " + error.exceptionMessage);
}
});
}
});
});
在我的 api 控制器发布方法中,我有这个:
if (
db.TableName.Any(
x => x.Email.ToUpper().Equals(object.Email.ToUpper())))
{
throw new Exception("This email already exists!");
}
现在,这确实会在 toastr 通知中返回异常消息,但电子邮件文本框没有以红色突出显示,因为它没有添加引导程序 input-validation-error 类。
所以我的问题是,有没有办法添加一种方法来检查数据库,以查看用户在表单中输入的电子邮件是否已经通过 jquery 验证存在?
感谢任何帮助。
【问题讨论】:
-
可以在api调用后触发对元素的验证吗?
-
你能说明你的意思吗?
-
远程属性是你最好的选择看到这个stackoverflow.com/a/28505295/4868839
标签: jquery ajax asp.net-mvc validation