Хранение данных в HttpContext.Current.Items vs ViewData - PullRequest
13 голосов
/ 06 апреля 2010

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

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

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

Было бы правильно сказать, что HttpContext.Current.Items[...] означает Controllers как ViewData[...] означает Просмотры ?

1 Ответ

21 голосов
/ 06 апреля 2010

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

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

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

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

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

...