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