Хорошо, думаю, я понял это.
Проблема на самом деле связана с использованием ненавязчивой проверки с MVC 3, поскольку она выполняет инициализацию проверки JQuery для вас. Таким образом, единственный способ настроить проверку - использовать form.data("validator").settings
. Тем не менее, пытаясь установить errorLabelContainer
с помощью этого метода, т. Е .:
$("#form").data("validator").settings.errorLabelContainer = "#messageBox";
... не работает, потому что проверка jQuery использует это значение только внутри своей функции init (), чтобы сконфигурировать кучу других параметров, таких как контейнеры и т. Д. Я пытался эмулировать то, что он делает, или даже вызывать $("#form").data("validator").init()
снова после установки errorLabelContainer
, но это вызвало странное поведение и скрыло кучу других настроек.
Так что я выбрал другой подход. Во-первых, я предоставил MVC место для вставки отдельных строк ошибок, используя @Html.ValidationMessageFor()
и добавив display:none
, чтобы скрыть его:
@using (Ajax.BeginForm(...))
{
<div class="field-panel">
@Html.EditorFor(m => m.PatientID)
@Html.ValidationMessageFor(m => m.PatientID, null, new { style = "display:none"})
...
</div>
<input type="submit" class="carecon-button-next" value="Next" />
<ul id="error-summary">
</ul>
}
Затем в обратном вызове showErrors
я копирую эти строки в сводку проверки после вызова defaultShowErrors()
:
$("#form").data("validator").settings.onfocusout = function (element) { $(element).valid(); };
$("#form").data("validator").settings.showErrors = function (errorMap, errorList) {
this.defaultShowErrors();
$("#error-summary").empty();
$(".field-validation-error span", $("#form"))
.clone()
.appendTo("#error-summary")
.wrap("<li>");
};
Это дало мне поведение, которое я хотел, показывая / скрывая ошибки проверки в виде списка в сводке, когда пользователь заполнял поля в форме.