Многошаговая форма мастера с MVC - PullRequest
3 голосов
/ 29 ноября 2010

Я планирую создать многошаговую форму с asp.net mvc 2. Итак, мое веб-приложение будет иметь 5 страниц, соответствующих 5 шагам.Каждый шаг имеет две кнопки отправки, предыдущий и следующий.Входные данные для каждого шага будут сохранены для последующего просмотра.Например, мы уже ввели данные для шага s 1,2,3,4 и сейчас мы на шаге 5.Когда я нажимаю «предыдущий» 2 раза, шаг 3 должен отображаться с данными, которые я вводил ранее.Аналогично, когда я нажимаю «Далее», введенные данные также должны быть сохранены на шаге 4 (поскольку мы сейчас на шаге 3). Модель, используемая для каждого шага, может сильно отличаться.

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

  1. Сеанс

    • Сеанс по умолчанию - сеанс cookie, поэтомусеанс не будет работать хорошо, если в веб-браузере не включены файлы cookie.У меня также есть проблема, когда IE не поддерживает cookie, переменная сеанса будет потеряна только в том случае, если субъект использует hostname для доступа к веб-приложению. Сессия отлично работает в IE с IP-адресом URL .
    • Сеанс cookie меньше: небезопасен, имеет много ограничений и имеет проблемы с post (http://stackoverflow.com/questions/3972433/mvc2-cookieless-session-issue-using-post или http://forums.asp.net/p/1517391/3634908.aspx)
  2. Tempdata: tempdata просто сохраняется для одного запроса.

Я очень ценю ваш совет!

Спасибо большое!

Ответы [ 4 ]

2 голосов
/ 29 ноября 2010

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

Я предпочитаю сеанс,его легко хранить, извлекать и легко настроить.Когда вы уменьшаете масштаб (до большего количества серверов), вы можете легко настроить свое приложение для хранения состояния сеанса в базе данных сервера sql, чтобы вы были готовы к будущему.

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

Если между постами много информации, и вы не хотите много скрытых полей, вытакже можно создать объект для вашего хранилища (как вы бы создали, когда бы вы хранили его в сеансе) и сериализовать объект, закодировать в base64 и сохранить его в ОДНОМ скрытом поле.

1 голос
/ 29 ноября 2010

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

0 голосов
/ 29 ноября 2010

Я согласен с JonoW, я хотел бы рассмотреть возможность скрытых полей для хранения данных между этапами (сработало для меня)

0 голосов
/ 29 ноября 2010

TempData реализован с переменными Session за кулисами, поэтому ваши опасения по поводу сессий распространяются на использование TempData.

Если бы мастер был достаточно длинным и сложным, я бы, вероятно, сохранил бы его в БД, в противном случае, еслион достаточно мал и прост, вы можете хранить все данные для всех шагов в полях формы и размещать все данные между шагами.

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