asp.net Core 2.1 MVC валидаторы не работают - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть следующая страница:

@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 голосов
/ 01 ноября 2018

Проверка jQuery запускается только после того, как ввод был сфокусирован / изменен или когда форма фактически отправлена ​​(ваш код работает до этого). В любом случае метод valid сообщает только о состояниях входов, в которых была запущена проверка. Другими словами, он может вернуть true, даже если требуемые входные данные пусты, если они еще не проверены.

Короче говоря, вам нужно сначала позвонить validate, чтобы запустить полную проверку формы.

loginForm.validate();
if (loginForm.valid()) {
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...