Сводка валидации asp.net mvc 3 не отображается из-за ненавязчивой валидации - PullRequest
12 голосов
/ 07 марта 2011

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

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

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

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

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

<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.

Ответы [ 3 ]

5 голосов
/ 23 мая 2013

Я использовал версию ответа Торбьерна Номелса

Кроме этого, я вешаю resetSummary с объекта валидатора

$.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();
        }
    } 
});
4 голосов
/ 04 марта 2013

Вы можете настроить сводку проверки, которая будет запускаться намного чаще, в 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();
    }
}

Вот сброшенная сумма, использованная выше:

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 голосов
/ 07 марта 2011

У меня есть похожий вопрос, открытый здесь: Как отобразить результаты проверки на стороне клиента MVC 3 в сводке проверки , но предложенное Дарином решение, похоже, не работает так, как я (и, вероятно, вы) этого хотитек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...