2009-06-09 4 views
0

У меня есть интерфейс стиля мастера, где мне нужно собирать данные от пользователей. Мои менеджеры попросили, чтобы информация собиралась поэтапно.Большая дилемма - ASP.NET и jQuery

Я решил иметь страницу page.aspx с каждым шагом процесса как отдельный пользовательский элемент управления. step1.ascx step2.ascx и т. д.

Теперь, когда он запускает первоначальный запрос GET, я обрабатываю всю страницу (которая находится внутри главной страницы) и step1.ascx. Когда затем следующий запрос POST приходит для шага 2 (используя строку запроса step = 2), я предоставляю браузеру только step2.ascx, переопределяя метод Render (HtmlTextWriter) и использую метод jQuery html() для замены содержимого div ,

Проблема с этим целым подходом, помимо того, что я взламываю (по-моему), заключается в том, что обновить viewstate невозможно, поскольку обычно это обрабатывается на стороне сервера.

Мое обходное решение заключается в том, чтобы сохранить содержимое step1.ascx во временном хранилище сеансов, поэтому, если пользователь решает нажать кнопку «Назад», чтобы вернуться на один шаг, я могу выплеснуть значения, которые ранее были сохранены.

Я чувствую, что я надеваю свою техничную шляпу здесь, желая попробовать последнее увлечение Javascript, поскольку jQuery с .NET взяла много взлома, как подходы и обратное проектирование, чтобы получить право. Было бы проще просто использовать панель обновлений и сделать с ней или есть сайт с полным ресурсом использования jQuery для выполнения всего в ASP.NET?

Спасибо, что нашли время, чтобы прочитать это.

ответ

7

Другой подход, который может быть проще работать, чтобы загрузить всю форму с начальным GET запроса, а затем скрыть все разделы кроме первого. Затем вы используете jQuery, чтобы скрыть и показать разные части формы, а когда показана последняя секция, вся форма размещена в однаPOST на сервер. Таким образом, вы можете обрабатывать входные данные на сервере точно так же, как если бы запись данных была сделана одним шагом пользователем, и все же получить пошаговое выполнение на стороне клиента.

+0

Иногда я использую эту технику. – yfeldblum

+0

В качестве плюса вы получаете совместимость с браузерами с отключенным javascript –

0

Вы изучали использование ASP.NET Wizard control? Это немного сложно настроить пользовательский интерфейс, но в остальном это хорошо работает для меня в подобных сценариях.

+0

Работает ли он с jquery и viewstate? –

+0

Да, чтобы ViewState, я не знаю JQuery. Я бы подумал, что опыт работы с навигацией между экранами мастера будет очень похож и на обратные передачи ASP.NET, и на JQuery. –

+0

Поскольку я понял вопрос, однако, требование состояло в том, чтобы сделать это с помощью jQuery и только частичными обратными передачами, если они есть.Конечно, элемент управления Wizard в UpdatePanel, возможно, выполнит эту работу, но с помощью _lot_ накладных расходов ... –

1

Вы можете просто поместить все свои пользовательские элементы управления один за другим и включить видимость текущего шага и включить другие элементы управления, если это необходимо. Не нужно возиться с переопределением Render(). Таким образом, пользовательский элемент управления viewState будет управляться сервером. и вы можете сосредоточиться на любой логике проверки шага.

Использование UpdatePanel для включения этих шагов даст возможность ajax и по-прежнему будет обеспечивать проверку на каждом шаге. Если вы в порядке с проверкой нескольких шагов сразу, предложение Томаса Ликена (скрыть/показать с помощью JQuery) даст быстрый пошаговый опыт.

Смежные вопросы