Подтвердить что ты не робот

Asp.net mvc 3 сводка валидации, не показывающая посредством ненавязчивой проверки

У меня возникают проблемы с получением проверки на стороне клиента asp.net MVC для работы, как я этого хочу.

У меня это в основном работает, однако резюме проверки не отображается, пока пользователь не нажимает кнопку отправки, даже если отдельные входы подсвечиваются как недопустимые, так как пользовательские вкладки/клики и т.д. свой путь через форму. Это все происходит на стороне клиента.

Я бы подумал, что резюме проверки будет отображаться, как только будет обнаружено поле ввода, которое было недействительным.

Это поведение по дизайну? Есть ли какой-либо путь вокруг него, так как я хотел бы, чтобы сводка валидации отображалась сразу же после обнаружения того, что одно из полей ввода недопустимо.

Мой код в основном,

<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
...
    @using (Html.BeginForm())
    {
        @Html.ValidationSummary(false)
        @Html.EditorFor(model => model);   
        ...

И мои ссылки _Layout.cshtml jquery-1.4.4.min.js.

4b9b3361

Ответ 1

Вы можете настроить сводку проверки, которая будет запускаться намного чаще, в onready:

var validator = $('form').data('validator');
validator.settings.showErrors = function (map, errors) {
    this.defaultShowErrors();
    this.checkForm();
    if (this.errorList.length)
        $(this.currentForm).triggerHandler("invalid-form", [this]);
    else
        $(this.currentForm).resetSummary();
    }
}

Здесь resetSummary, используемый выше:

jQuery.fn.resetSummary = function () {
    var form = this.is('form') ? this : this.closest('form');
    form.find("[data-valmsg-summary=true]")
        .removeClass("validation-summary-errors")
        .addClass("validation-summary-valid")
        .find("ul")
        .empty();
    return this;
};

Ответ 2

Я использовал версию ответа Torbjörn Nomells

За исключением случаев, когда я повесил resetSummary с объекта validator

$.validator.prototype.resetSummary= function () {
    var form = $(this.currentForm);
    form.find("[data-valmsg-summary=true]")
        .removeClass("validation-summary-errors")
        .addClass("validation-summary-valid")
        .find("ul")
        .empty();
    return this;
};

Затем измените вызов его на

$.validator.setDefaults({
    showErrors: function (errorMap, errorList) {
        this.defaultShowErrors();
        this.checkForm();
        if (this.errorList.length) {
            $(this.currentForm).triggerHandler("invalid-form", [this]);
        } else {
            this.resetSummary();
        }
    } 
});