Обновить сводку проверки в режиме реального времени

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

Я добавил сводку проверки:

 @Html.ValidationSummary(false)

Это работает, клиентская сторона "все. Я бы хотел, чтобы он вел себя по-другому; в настоящее время сообщения в сводке валидации изменяются только при нажатии кнопки отправки. Я бы хотел, чтобы они были динамически, заполнены аналогично каждому сообщению проверки поля.

Может кто-нибудь предложить способ достичь этого?

Любая информация о том, что запускает итоговое обновление, будет отличным.

Ответ 1

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

  • Обновить сводку только после ее просмотра (после проверки страницы/отправки)
  • Удалить сводку, когда все действительно.

Позвольте извлечь валидатор, переопределить showErrors() и реализовать нашу логику:

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

Поскольку я использую это решение для всего своего сайта, я создал следующий init (onready):

$('form').each(function () {
    var validator = $(this).data('validator');
    if (validator) {
        validator.settings.showErrors = function (map, errors) {
            this.defaultShowErrors();
            if ($('div[data-valmsg-summary=true] li:visible').length) {
                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

Сводка на стороне клиента, по-видимому, генерируется, когда вся форма проверена, и вы можете сделать это сами, вызывая метод valid() plugin. Добавьте это после скриптов проверки jquery.

<script>
    $(function () {
        $(':input').on("keyup click", function () {
            $('form').valid();
        });
    });
</script>

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