Хранение данных в HttpContext.Current.Items vs ViewData

Когда целесообразно хранить данные в HttpContext.Current.Items[...] и хранить данные в ViewData[...]?

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

Один прецедент - это передача пользовательских кредитов от базового контроллера OnActionExecuting(...) для использования в вычислениях Controller и для отображения в Views; Я знаю, что для этого я должен использовать ViewData, но у меня были некоторые непоследовательные результаты с вложенными частичными представлениями.

Можно ли сказать, что HttpContext.Current.Items[...] соответствует Controllers, например ViewData[...] для Представлений

Ответы

Ответ 1

HttpContext.Current.Items сохраняется только на время запроса, но он глобальен для всего в этом запросе.

Сессия, очевидно, длится для всего сеанса пользователя и сохраняется между запросами.

Вы должны быть в состоянии выяснить, какой из них вам нужно использовать на основе этих критериев. Использование HttpContext.Current.Items - это не то, что я бы рекомендовал, поскольку он имеет тенденцию быть своего рода "глобальной переменной", и магические ключевые строки, как правило, участвуют, но иногда вам действительно нужно его использовать.

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

Разница в поведении очевидна, когда вы делаете RenderPartial и пытаетесь добавить что-то в ViewData - когда вы вернетесь к родительскому представлению, элемент не существует.