Мастер ASP.NET с Post / Redirect / Get - PullRequest
       26

Мастер ASP.NET с Post / Redirect / Get

1 голос
/ 03 декабря 2010

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

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 03 декабря 2010

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

Единственными недостатками являются дополнительная двусторонняя передача (для перенаправления) и немного повышенная сложность отображения сообщений о состоянии .

Я никогда не возвращаю результаты POST пользователям.

1 голос
/ 03 декабря 2010

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

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

...