Jquery 用于远程验证的asp.net核心不引人注目的表单验证回调

Jquery 用于远程验证的asp.net核心不引人注目的表单验证回调,jquery,asp.net-mvc,asp.net-core,unobtrusive-validation,Jquery,Asp.net Mvc,Asp.net Core,Unobtrusive Validation,我有两个字段(daaaa;D)电子邮件和密码的登录表单… 密码字段最初是隐藏的,我需要通过远程验证器检查电子邮件,并显示密码字段,如果电子邮件是有效的 [远程(“ValidateAccount”、“Account”、ErrorMessage=“我找不到任何匹配的帐户!”)] 验证程序本身工作并向服务器发出http get请求,验证电子邮件并显示错误消息 但我无法检测此验证何时完成,因此我可以显示密码字段 我试图覆盖验证器showErrors函数,但在远程验证器完成之前,它会被触发,并出现空错误

我有两个字段(daaaa;D)电子邮件和密码的登录表单…
密码字段最初是隐藏的,我需要通过远程验证器检查电子邮件,并显示密码字段,如果电子邮件是有效的

[远程(“ValidateAccount”、“Account”、ErrorMessage=“我找不到任何匹配的帐户!”)]

验证程序本身工作并向服务器发出http get请求,验证电子邮件并显示错误消息

但我无法检测此验证何时完成,因此我可以显示密码字段

我试图覆盖验证器
showErrors
函数,但在远程验证器完成之前,它会被触发,并出现空错误

我在(“invalid form.validate”,console.log)上尝试了
$(“#form”)但这仅在提交表单时触发。这同样适用于
invalidHandler

因此,我只能想到两种选择:
1-使用
setTimeout
检查字段错误消息
2-为远程验证器编写自己的自定义逻辑


那么还有其他选项吗?

我想您也可以使用
DOMCharacterDataModified
事件来检查错误消息的范围是否已更改。下面是一个工作演示,如下所示:

@model Testdata
<form asp-action="Create">
    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
    <div class="form-group">
        <label asp-for="Email" class="control-label"></label>
        <input asp-for="Email" class="form-control" />
        <span asp-validation-for="Email" id="EmailMessage"class="text-danger"></span>
    </div>
    <div class="form-group">
        <label asp-for="Password" class="control-label"></label>
        <input asp-for="Password" class="form-control" hidden />
        <span asp-validation-for="Password" class="text-danger"></span>
    </div>
    <div class="form-group">
        <input type="submit" value="Create" class="btn btn-primary" />
    </div>
</form>

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
    <script>
        $('#EmailMessage').on('DOMSubtreeModified', function () {
            var input = $("#Email").hasClass("valid");
            if (input) {
                $("#Password").removeAttr("hidden");
            }
            else {
                $("#Password").attr("hidden","hidden");
            }
    })
    </script>
}
@model Testdata
@节脚本{
@{wait Html.RenderPartialAsync(“_validationScript”);}
$('#EmailMessage')。在('DOMSubtreeModified',函数(){
var输入=$(“#电子邮件”).hasClass(“有效”);
如果(输入){
$(“#密码”).removeAttr(“隐藏”);
}
否则{
$(“#密码”).attr(“隐藏”、“隐藏”);
}
})
}
结果:


我能够用这段代码实现这一点

  var loginForm = $('#login-form')[0];
    var settings = $.data(loginForm, 'validator').settings;
    var oldSucessFunction = settings.success;

    settings.success = function (error, element) {
      //Do something here
      oldSucessFunction(error, element);
      if (emailInput[0] === element) {
        enableButton(nextButton);
      } else if (passwordInput[0] === element) {
        enableButton(submitButton);
      }
    }

这对远程验证程序不起作用,远程验证运行时错误范围将为空