Мой процесс проверки имеет следующий рабочий процесс:
Каждый из вышеперечисленных шагов имеет свое действие в том же контроллере.
Теперь проблема в том, что если человек добирается до # 5 и хочет изменить адрес, они возвращаются к # 3. Но когда они попали в submit, они переходят к следующему шагу, № 4, но они должны вернуться прямо к №5.
Я знаю, что могу передавать информацию через строку запроса/форму и сообщать # 3, чтобы проверить наличие этого ключа, если он там, а затем перенаправить на # 5.
Существуют ли проверенные, передовые методы управления рабочим процессом, подобные этому в asp.net-mvc (или вообще)?
Обычно я настраиваю сеанс для хранения состояния и данных пользователя и определяю, какой шаг перейти к следующему. Следовательно, контроллер при вызове может запустить некоторую логику, чтобы определить, в каком состоянии находится пользователь, а затем вызвать код рендеринга для вывода формы, связанной с текущим состоянием пользователя.
IMHO, это упрощает процесс, поскольку вы не делегируете проверку состояния "что мое следующее состояние" на уровень форм, а в централизованное местоположение, что упрощает добавление в новую бизнес-логику в будущем.
Надеюсь, это поможет!
(Вы можете заменить сеанс невидимыми полями формы, строками запроса и т.д.)
Если вы действительно "ненавидите сеансы", как вы говорите, есть потенциально другой параметр, который должен передать запрос для всех "обратных" операций, определяющих, куда идти дальше.
Так работает большинство страниц входа в систему - если вы не авторизованы для просмотра страницы, она перенаправляется на страницу входа с параметром querystring redirectUrl. Затем при успешном входе в систему вы будете перенаправлены на страницу, из которой вы изначально пришли.
И просто чтобы немного упростить код, вы можете перегрузить метод RedirectToAction() на вашем контроллере таким образом, чтобы он перенаправлял к данному действию UNLESS там специальную строку запроса, и в этом случае она перенаправляет туда.
изменить: Я знаю, что вы упомянули это как возможность, но я все равно его разместил, потому что: 1) нет ничего плохого в этом (особенно, если вы "ненавидите сеансы" ), и 2) вы упомянули о том, что ваша проверка действий на наличие ключа, который, я думаю, может быть лучше написан, как я описал (с использованием перегрузки - DRY )