#asp.net-mvc #validation #asp.net-mvc-3 #client-side-validation
#asp.net-mvc #проверка #asp.net-mvc-3 #проверка на стороне клиента
Вопрос:
У меня есть огромная форма, которую я хотел бы разделить на разные этапы, но мне нужно проверить поля на текущем шаге, прежде чем перейти к следующему шагу.
Например: Моя форма содержит 40 полей, и они разделены на 4 этапа (по 10 полей в каждом). В HTML 40 находятся на одной странице, но с помощью jQuery я показываю только первые 10 и кнопку «Далее», четвертая страница содержит кнопку «Отправить». Мне нужен способ вызвать проверку этих десяти полей, прежде чем перейти к следующему шагу.
Есть ли какой-либо способ добиться этого?
С уважением.
Ответ №1:
Предполагая, что вы используете ненавязчивую проверку mvc3 по умолчанию, вы могли бы вызвать проверку нужных элементов с помощью цикла и проверки одного элемента
Ответ №2:
Если вы используете кнопки для перехода между каждым шагом, вы можете изменить свою страницу, чтобы для каждого шага была отдельная форма. Затем вы можете ограничить проверку формой, которая является родительской для кнопки отправки, и использовать проверку для «шага», чтобы определить, следует ли включать / показывать форму для следующего шага. Вот несколько примеров кода:
$(".stepButton").live("click", function() {
if (isValid(this)) {
// code to proceed to next step
}
});
function isValid(el) {
var $thisform = $(el).parent().parent();
$thisform.validate();
return $thisform.valid();
}
Ответ №3:
Вы могли бы использовать подключаемый модуль проверки jQuery. Здесь есть возможность игнорировать элементы при проверке. Таким образом, вы могли бы, например, пометить все поля, которые не отображаются (и пока не требуют проверки), классом. Например, чтобы игнорировать все элементы формы с помощью class="ignore"
, вы бы сделали это:
$("#myform").validate({
ignore: ".ignore"
})
Ответ №4:
Хотя игнорирование элементов путем пометки их атрибутом class="ignore"
работает, MVC 3 по умолчанию использует подключаемый модуль проверки jQuery и это plug-in will not validate disabled fields
. Код, в котором вы скрываете свои элементы, помимо видимых 10 полей, вы можете просто отключить и эти элементы, и они не будут проверены (и обратите внимание, что эти отключенные поля также не будут отправлены на сервер).
например
$('input').attr('disabled', 'disabled');