我有一个电子邮件字段,上面附加了一个远程验证电话,以验证输入的电子邮件是否存在于系统中。用户键入后,将调用controller方法,并将其传递回标志。
我还对所有ajax请求附加了一个全局ajaxStart事件,该事件显示了正在加载的微调器并阻止了该页面。我想防止ajaxStart在此特定功能上执行。据我所知,没有对象传递给ajaxStart事件,并且我不确定如何在此特定请求中禁止它。
这是呈现的html:
<input class="form-control" data-val="true" data-val-remote="Email already exists" data-val-remote-additionalfields="*.Email" data-val-remote-type="POST" data-val-remote-url="/account/emailexists" id="Email" name="Email" placeholder="Business Email" type="email" value="" />
模型视图:
public class RegisterViewModel
{
[Remote("EmailExists", "Account", HttpMethod = "POST", ErrorMessage = "Email already exists")]
public string Email { get; set; }
}
帐户控制器:
[AllowAnonymous]
[HttpPost]
public JsonResult EmailExists(string Email)
{
var exists = Email.UserExists();
return Json(exists, JsonRequestBehavior.AllowGet);
}
Javascript:
$(function () {
$(document).ajaxStart(function () {
// Return if this is '/account/emailexists'
blockUI();
}).ajaxStop($.unblockUI);
//...
对于所有其他ajax函数,我正在使用global:false参数来抑制全局事件侦听器-不确定如何使用Unobtrusive Javascript执行此操作。
答案 0 :(得分:0)
了解了.ajaxSend()之后,我决定尝试使用该方法,而不是.ajaxStart()。在此处查看这两个事件的区别:
What's the difference between : 1. (ajaxStart and ajaxSend) and 2. (ajaxStop and ajaxComplete)?
.ajaxSend()和.ajaxComplete()在发送/完成时每个请求触发一次。这就是为什么这些处理程序传递参数而全局/批处理参数不传递参数的原因:
我使用ajax对象参数来查看请求url是否来自远程验证调用,以禁止加载图标。到目前为止,这种方法行之有效。
$(document).ajaxSend(function(e, xhr, settings) {
if (settings.url == '/account/emailexists') return;
blockUI();
});
$(document).ajaxStop(function () { $.unblockUI(); });