Я создал мастер извлечения, используя вкладки пользовательского интерфейса jQuery на веб-сайте Asp.Net MVC 3. Каждая вкладка мастера загружает частичное представление, содержащее форму. Если форма действительна, я отправляю данные формы и сохраняю их в базе данных.
В настоящее время я могу проверить проверку на стороне клиента, и, если текущая вкладка недействительна, предотвратить выбор следующей / предыдущей вкладки при нажатии следующей или предыдущей кнопки, используя метод, описанный здесь http://jqueryui.com/demos/tabs/#...prevent_switching_to_the_tab_on_click_depending_on_form_validation
Однако не вся проверка может быть выполнена на стороне клиента, поскольку нам необходимо выполнить некоторые проверки на стороне сервера. Поэтому, если вкладка проходит проверку на стороне клиента, я отправляю форму и проверяю ответ, возвращенный сервером. Если проверка на стороне сервера проходит, возвращается пустая строка, но если это не удается, я возвращаю то же частичное представление для этой вкладки.
Вот функция выбора в моем селекторе вкладок jQuery UI:
select: function (event, ui) {
var checkOutTabs = $(".checkout-tabs").tabs();
var currentTabIndex = checkOut.getSelectedTabIndex();
var currentTab = $(".checkout-step").get(currentTabIndex);
var isValid = checkOut.validateTab(currentTab, ui.index);
//prevent tab change
if (!isValid) {
return false;
}
var form = $(currentTab).find("form");
//Submit this tab
$.post(form.attr("action"), form.serialize(), function (data) {
if (!data) {
checkOutTabs.tabs("enable", ui.index + 1);
return true;
} else {
$(currentTab).find(".checkout-step").parent().html(data);
return false;
}
});
}
Проблема, с которой я столкнулся, заключается в том, что как только я вызываю метод jQuery $ .post (), вкладки переключаются на следующую вкладку, независимо от того, возвращаю ли я true или false. Я нашел сообщение (Лучший способ создания вкладок jQuery), в котором похожая реализация, но они не сообщали об этой проблеме. Я что-то делаю не так или это ожидаемое поведение?