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
.
Ответы
Ответ 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();
}
}
});
Ответ 3
У меня есть аналогичный вопрос: Как отобразить результаты проверки на стороне клиента MVC 3 в сводке валидации, но предлагаемое решение Дарина, похоже, не работает так Я (и, вероятно, вы) этого захотите.