Подтвердить что ты не робот

Asp.Net MVC и сессия

Я хотел бы построить объект в разных шагах приложения asp.net mvc, каждый из которых будет другой страницей. То, что вы храните в сеансе в быстром приложении Web.Forms.

Читая об этом, сеанс мне не кажется чем-то очень asp.net MVC'ish. Однако я не могу думать о других альтернативах этой ситуации, поскольку TempData и ViewData тоже не подходят, так что, возможно, я ошибаюсь.

Конечно, я мог бы поставить 4 шага на одну страницу и показать/скрыть, но это не моя точка с вопросом. Я хотел бы услышать ваше мнение о Сессии в MVC, если это хороший подход к этой многоступенчатой ​​проблеме, или вы склонны делать это другими способами.

Это очень похоже на вопрос Переменные сеанса в ASP.NET MVC, за исключением того, что я не ищу, как получить доступ к сеансу, но если это лучший способ для решения такой проблемы или есть что-то лучшее, чего я не вижу в Asp.Net MVC.

Заранее спасибо

4b9b3361

Ответ 1

В сеансе нет ничего сверх-MVC, его жизненно важная часть Интернета, и большинство сайтов каким-то образом используют его. У вас действительно есть два основных варианта. Или сохраните объект в базе данных между страницами (что означает сохранение неполного объекта) или поместите его в сеанс. Оба имеют преимущества и недостатки.

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

Путь к базе данных лучше во многих отношениях, но обычно вы не хотите сохранять неполный объект в базе данных, один компромисс заключается в создании другой таблицы и сохранении объекта, сериализованного в этой таблице. Он не проходит через ваши настоящие таблицы и поэтому вам не нужно идти на компромисс в отношении ограничений базы данных. (вы также можете хранить данные сеанса в базе данных, которая в основном делает то же самое)

В конце концов, это вызов между двумя способами, я использовал оба эти года.

Ответ 2

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

Ответ 3

Вы пробовали <%= Html.HiddenField(...) %>?