рабочий процесс оформления заказа, проблемы с перенаправлениями - PullRequest
2 голосов
/ 15 января 2010

Мой процесс оформления заказа имеет следующий рабочий процесс:

  1. страница оформления заказа
  2. адрес доставки
  3. изменить адрес доставки (добавить / изменить)
  4. способ доставки
  5. платеж
  6. Оформить заказ

Каждый из вышеперечисленных шагов имеет свое собственное действие в том же контроллере.

Теперь проблема в том, что если человек добирается до # 5 и хочет изменить адрес, он возвращается к # 3. Но когда они нажимают «Отправить», они переходят к следующему шагу, # 4, но они должны вернуться прямо к # 5.

Я знаю, что могу передать информацию через строку / форму запроса и сказать # 3, чтобы проверить наличие этого ключа, если он там есть, а затем перенаправить на # 5.

Существуют ли проверенные, передовые методы для управления рабочим процессом, подобным этому, в asp.net-mvc (или вообще)?

Ответы [ 2 ]

1 голос
/ 15 января 2010

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

ИМХО, это упрощает процесс, поскольку вы не делегируете проверку "что такое мое следующее состояние" на уровень форм, а централизовано, что позволяет легко добавлять новую бизнес-логику в будущем.

Надеюсь, это поможет!

(Вы можете заменить сеанс невидимыми полями формы, строками запроса и т. Д.)

0 голосов
/ 15 января 2010

Если вы действительно выполняете «сеансы ненависти», как вы говорите, потенциально существует другой вариант, который заключается в передаче строки запроса для всех «обратных» операций, определяющих, куда идти дальше.

Так работает большинство страниц входа в систему - если вы не авторизованы для просмотра страницы, она будет перенаправлена ​​на страницу входа с набором параметров строки запроса redirectUrl. Затем при успешном входе вы будете перенаправлены на страницу, с которой изначально пришли.

И просто, чтобы немного упростить ваш код, вы можете перегрузить метод RedirectToAction () на вашем контроллере так, чтобы он перенаправлял на заданное действие, ЕСЛИ есть специальная строка запроса, в этом случае он перенаправляет туда.

edit: Я знаю, что вы упомянули это как возможность, но я все равно опубликовал это, потому что: 1) в этом нет ничего плохого (особенно если вы «ненавидите сеансы»), и 2) вы упомянули о проверке действия на наличие ключа, которую, я думаю, можно было бы лучше написать, как я описал (используя перегрузку - DRY )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...