asp.net Core 2.1 MVC验证器不起作用

时间:2018-11-01 10:35:03

标签: jquery asp.net-core-mvc

我有以下页面:

@model LogonModel
<div class="login-modal modal">
<div class="modal-dialog modal-dialog-centered" role="document">
    <div class="modal-content">
        <div class="modal-header">
            <h5 class="modal-title">Welcome</h5>
        </div>

        <div class="modal-body">
            @if (!ViewData.ModelState.IsValid)
            {
                <div class="alert alert-danger">
                    @foreach (var modelState in ViewData.ModelState)
                    {
                        <ul><li>@Html.ValidationMessage(modelState.Key, modelState.Value)</li></ul>
                    }
                </div>
            }

            <div class="row">
                <div class="col-md-12">
                    <p>Don't have an account? <a href="#">Contact us now.</a></p>

                    <form asp-action="Login" class="login-form">
                        <div asp-validation-summary="ModelOnly" class="validation-summary text-danger"></div>

                        <div class="form-group">
                            <label asp-for="EmailAddress" class="control-label">Email Address</label>
                            <input asp-for="EmailAddress" class="form-control" />
                            <span asp-validation-for="EmailAddress" class="text-danger"></span>
                        </div>
                        <div class="form-group">
                            <label asp-for="Password" class="control-label"></label>
                            <input type="password" asp-for="Password" class="form-control" />
                            <span asp-validation-for="Password" class="text-danger"></span>
                        </div>

                        <div class="form-group">
                            <input type="submit" value="Sign in" class="btn btn-default login-submit" />
                        </div>

                        <div class="form-check">
                            <input type="checkbox" class="form-check-input" asp-for="RememberUser">
                            <label class="form-check-label" asp-for="RememberUser">Remember my account details</label>
                        </div>

                        <div class="form-group">
                            <a href="#">Login using a subscription ID</a><br />
                            <a href="#">Forgot your password?</a>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>

最初,发给控制器的帖子只是在“提交”按钮上,验证者就可以了。即省略电子邮件,验证程序将显示错误消息。由于其他原因。当我按下提交按钮时,我先调用jQuery函数,然后再转到控制器,而在JavaScript中,我要做的第一件事是:

var loginForm = $(".login-form");

    if (loginForm.valid()) {…..

这似乎不起作用,因为即使例如我不发送电子邮件,我的JavaScript也会被调用,并且仍然会通过“ if”语句中的代码。

我该怎么做才能使验证器重新工作?

1 个答案:

答案 0 :(得分:0)

jQuery验证仅在输入被集中/修改或实际上提交(您的代码在此之前运行)后才触发。在任何一种情况下,valid方法仅报告已触发验证的输入状态。换句话说,即使需要验证的输入为空,也有可能返回true

简短地说,首先需要调用validate,以触发完整表单验证。

loginForm.validate();
if (loginForm.valid()) {
    ...
}