Я столкнулся с той же проблемой.Я добавил удаленную проверку в форму, в которой было два входа для отправки, и значение кнопки отправки, на которую нажали, было не всегда опубликовано больше.
В то время как другие ответы предоставляют обходные путиЯ немного углубился в это и отвечу на фактический вопрос, который вы задали: "Почему кнопка, которая использовалась для отправки формы, была исключена из публикации формы, когда удаленная проверка не вызывается до отправки формы".
Я знал, что Javascript Submit не включает значение кнопки Submit .Поэтому я попытался разместить с отключенным JavaScriptПроверка не сработала, но ценность моей отправки была опубликована.Я предположил, что jquery.validate.js подключается и отправляет программную отправку.Это действительно так.Вот что происходит, используя jquery.validate.js 1.9.0, без сжатия:
- Когда страница загружена, в строке 942 средства проверки расширяются с помощью метода remote ,и в строке 735 с прототипом stopRequest .
- Проверка происходит, когда поле ввода теряет фокус в первый раз, когда вы вводите его после этого или когда отправляете форму.
- После проверки вызывается метод stopRequest .
- Когда щелкают по входу подтверждения, отправка каким-то образом подавляетсяв строке 56 есть оператор
event.preventDefault();
, но он вызывается только в режиме отладки.В любом случае, метод stopRequest будет вызываться при нажатии на отправку и после выполнения удаленной проверки. - Когда форма действительна, вызывается строка 742:
$(this.currentForm).submit();
, чтопрограммная отправка и не будет публиковать значение отправки.Вот почему я не могу определить, какая кнопка отправки была нажата.
Внимательно изучив способ расширения проверки, я нашел в строке 59 определение обработчика, который, кажется, предназначен для преодоления некоторыхпохожая проблема: он добавляет скрытый ввод с точным названием и значением кнопки отправки, которую обрабатывает.Однако в моем случае ни validator.settings.submitHandler
, ни validator.submitButton
не определены, поэтому этот код никогда не вызывается.
Было бы неплохо, если бы в этом случае также было добавлено это скрытое поле, поскольку MVC не будетне важно знать, какой тип ввода отправил значение, и действие post на контроллере могло бы просто использовать это значение.
Добавление Мой обходной путь для этой проблемы - добавление обработчика к функциям щелчкаотправляет:
$('input[type="submit"]').click(function () {
var hidden = $("<input type='hidden'/>").attr("name", this.name).val(this.value).appendTo($(this).closest("form"));
});
Скрытое поле создано, поэтому мне не нужно полагаться на скрытое поле с указанием правильного имени.Вы можете либо предоставить отправителям одинаковые имена и проверить их значение, либо дать им разные имена и проверить наличие параметра post.Конечно, вам также нужно будет использовать имя поля формы, которое еще не используется.