Ответ 1
HttpContext.Current.Items
сохраняется только на время запроса, но он глобальен для всего в этом запросе.
Сессия, очевидно, длится для всего сеанса пользователя и сохраняется между запросами.
Вы должны быть в состоянии выяснить, какой из них вам нужно использовать на основе этих критериев. Использование HttpContext.Current.Items
- это не то, что я бы рекомендовал, поскольку он имеет тенденцию быть своего рода "глобальной переменной", и магические ключевые строки, как правило, участвуют, но иногда вам действительно нужно его использовать.
Кроме того, хотя ваше сравнение между .Items и ViewData довольно уместно,.Items отличается от того, как ведет себя ViewData, потому что каждый просмотр, участвующий в запросе (частичный или другой), получает свою собственную копию ViewData.
Разница в поведении очевидна, когда вы делаете RenderPartial
и пытаетесь добавить что-то в ViewData - когда вы вернетесь к родительскому представлению, элемент не существует.