2010-12-03 2 views
1

Я привык к шаблону Post/Redirect/Get, я нахожу его очень хорошей процедурой, и мне также кажется, что я больше думаю о структуре страницы, а не о relying на событиях ASP.Net слишком часто.ASP.NET Wizard with Post/Redirect/Get

В настоящее время я пишу функцию мастера для сайта, хотя не использую элемент управления ASP.NET Wizard, но обрабатываю его более вручную с помощью MultiView. Как правило, в прошлом я ожидал, что типичный пользовательский интерфейс будет GET> POST> POST> POST и т. Д. Для каждого последующего шага мастера. Тем не менее, я сейчас думаю о том, чтобы использовать подход P/D/G, часто ли люди делают это со своими волшебниками?

Мое настоящее мышление заключается в том, что после того, как пользователь выполнит шаг, и они решили продолжить, мой объект сеанса, содержащий текущую информацию мастера, будет сохранен обратно на сеанс, а затем будет перенаправлен перенаправление GET на страницу мастера. Когда страница мастера загружается, объект Session проверяется, чтобы определить правильный шаг для отображения пользователю.

Я вижу две хорошие преимуществ с этим:

  1. , что происходит с обычной пользой P/R/G и устраняет Refresh проблемы, а также
  2. пользователя может перейдите от мастера и вернитесь к нему (если их сеанс все еще активен), и они будут приняты прямо к правильному шагу.

Неужели люди считают это более чистым? Есть ли очевидные недостатки? Я думаю, что я мог бы превратиться в циничного программиста и доверять ASP.Net, а жизненный цикл Postback меньше, но это не так, как если бы этот подход привел к гораздо большему количеству кода? Если бы я не реализовал его, мне пришлось бы записывать все проверки против обновления пользователем или попытки перейти к шагам, которые они не должны в любом случае.

ответ

1

Да, это более чистый дизайн.

Единственными недостатками являются дополнительный обратный переезд (для перенаправления) и slightly increased complexity of displaying status messages.

Я больше не возвращаю результаты POST пользователям.

1

Одна из проблем с подходом, который вы описали, заключается в отсутствии функциональности «назад», которая является типичным ожиданием с помощью Wizards. Кроме того, имейте в виду, что кто-то может ожидать, что сможет работать через несколько сеансов мастера одновременно на разных вкладках браузера, и ваша система предотвратит это.

Функциональность «Назад» может быть включена со специальным значением строки запроса, помещенным в ссылку «Назад», которая инструктирует объект, хранящийся в сеансе, возвращать вещи на шаг. Для множественного экземпляра за один сеанс потребуется нечто большее; возможно, просто сохраняя данные в состоянии представления или создавая ключ для «экземпляра мастера». Или вы можете решить только поддерживать один экземпляр мастера для запуска в любой момент времени. (по общему мнению, это может быть крайне редкий случай, когда кто-то пытается запустить несколько экземпляров мастера одновременно)

+0

Спасибо за ответ. Мастером, о котором идет речь, является процедура оплаты, они не смогут запускать несколько сеансов. Когда каждый postback происходит, чтобы завершить шаг, это предотвратит его повторение (поэтому они не могли сказать, попытайтесь выполнить платеж дважды на двух разных вкладках). – Kasaku 2010-12-03 15:48:04

+0

Для обратной функциональности я разрешаю им вернуться к старым шагам, чтобы внести изменения в детали. Статус, который я удерживаю, будет отражать «последний статус», поэтому им будет разрешено посещать любой шаг, который ведет к этому шагу для внесения поправок в данные. – Kasaku 2010-12-03 15:49:22