Живые данные не отправляются с использованием ненавязчивой проверки MVC 4.5

0

У нас есть форма, в которой пользователь может перемещать элементы из одного окна с несколькими выборами в другое. Мы используем MVC 4.5 и jquery для проверки с помощью ненавязчивого javascript Microsoft.

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

Таким образом, решение звучит просто: используйте jquery для выбора всех элементов при отправке.

Проведя некоторое исследование (спасибо сообществу stackoverflow), мы смогли обнаружить необходимый код jquery для перехвата процесса отправки. Однако возникает проблема в том, что, когда код выбирает элементы, выбираются только ранее существовавшие элементы в поле выбора. Живые (динамические) элементы, которые были перемещены, не выбираются.

Вот код, который мы впервые использовали:

$('#UserProfileForm').bind('invalid-form.validate',function(){
    $(this).find('.selectbox option').each(function (i) {
        $(this).attr("selected", "selected");
    });
});

Мы обнаружили, что использование bind не работает, но вживую следует:

$('#UserProfileForm').live('invalid-form.validate',function(){
    $(this).find('.selectbox option').each(function (i) {
        $(this).attr("selected", "selected");
    });
});

Однако мы используем jquery 1.9, и функция live была удалена. Он был заменен следующим:

$(document).on('invalid-form.validate', 'form', function () {
    $(this).find('.selectbox option').each(function (i) {
        $(this).attr("selected", "selected");
    });
});

Однако это все еще не работает. Поэтому я заменил функцию выбора предупреждением, чтобы увидеть, работает ли оно вообще:

$(document).on('invalid-form.validate', 'form', function () {
    alert('test');
});

Предупреждение не появляется. Есть идеи?

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

Для тех, кто задается вопросом, почему я ссылаюсь на invalid-form.validate, является то, что я тестирую недопустимые данные формы. Тот же сценарий будет применяться, если это действительные данные формы. Я просто не стал говорить о том, как привязывать данные в реальном времени к действительному процессу подачи формы.

Теги:
validation
asp.net-mvc

1 ответ

-2

После проверки элементов я заметил, что jquery добавлял выбранный атрибут к параметрам. Однако параметры не были выделены. Это заставило меня подумать, что, возможно, вызов jquery для добавления выбранного атрибута был неправильным.

После некоторых экспериментов я обнаружил, что это было неправильно. Похоже, что если вы используете функцию attr jquery, она фактически не устанавливает опцию для выбора в DOM. Использование функции prop делает.

Вот код:

$(document).on('submit', 'form', function (e) {
    $(this).find('.selectbox option').each(function (i) {
        $(this).prop("selected", true);
    });
});

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

$('form').bind('invalid-form.validate', function () {
    $(this).find('.selectbox option').each(function (i) {
         $(this).prop("selected", true);
    });
});

Наслаждайтесь!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню