Jquery 用于远程验证的asp.net核心不引人注目的表单验证回调
我有两个字段(daaaa;D)电子邮件和密码的登录表单…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函数,但在远程验证器完成之前,它会被触发,并出现空错误
密码字段最初是隐藏的,我需要通过远程验证器检查电子邮件,并显示密码字段,如果电子邮件是有效的
[远程(“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);
}
}
这对远程验证程序不起作用,远程验证运行时错误范围将为空