Мастер jQuery Tabs с проверкой на стороне сервера - PullRequest
2 голосов
/ 20 мая 2011

Я создал мастер извлечения с использованием вкладок пользовательского интерфейса jQuery на веб-сайте Asp.Net MVC 3.Каждая вкладка в мастере загружает частичное представление, содержащее форму.Если форма действительна, я отправляю данные формы и сохраняю их в базе данных.

В настоящее время я могу проверить проверку на стороне клиента и, если текущая вкладка недействительна, запретить следующую / предыдущую вкладкуот выбора при нажатии следующей или предыдущей кнопки, используя метод, описанный здесь http://jqueryui.com/demos/tabs/#...prevent_switching_to_the_tab_on_click_depending_on_form_validation.

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

Вот функция выбора в моем селекторе вкладок пользовательского интерфейса jQuery:

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 ), в котором реализована знакомая реализация, но они не сообщили об этой проблеме.Я делаю что-то не так, или это ожидаемое поведение?

1 Ответ

1 голос
/ 20 мая 2011

$.post немедленно возвращается как асинхронный

возможно, вам придется блокировать (используя async = false в $ .ajaxOptions или что-то в этом роде) до получения ответа, а затем вернуть то, что вы хотите, изменив переменную с более широкой областью действия

...