2010-11-29 2 views
3

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

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

  1. Session

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

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

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

ответ

2

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

Мои предпочтения в отношении сеанса состоят в том, что его легко хранить, извлекать и легко настраивать. При масштабировании (на большее количество серверов) вы можете легко настроить приложение для хранения состояния сеанса в базе данных SQL Server, чтобы вы тоже были готовы к будущему.

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

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

1

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

+0

спасибо Ник, но я не собираюсь хранить данные о времени в базе данных – khoailang 2010-11-29 16:38:37

0

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

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

+0

Спасибо за ваш ответ, JonoW – khoailang 2010-11-29 16:40:11

0

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

+0

благодарит Фансиско, я думаю о вашем совете. Скажем, у меня есть большая модель для всех шагов. На первом этапе пользователю просто нужно ввести только одно поле. Итак, я один TextboxFox (...) и оставлю один из HiddenFor (...), правильно? Я бы очень хотел использовать возможности проверки ввода MVC2, поэтому мне нужно было бы добавить атрибут частичного подтверждения. (http://blog.stevensanderson.com/2010/02/19/partial-validation-in-aspnet-mvc-2/) – khoailang 2010-11-29 16:59:41

+0

прежде всего, сессия в MVC2 имеет важное значение!?!?!? – khoailang 2010-11-29 17:00:15

Смежные вопросы