HttpContext.Current.Items[...]
по сравнению с тем, чтобы хранить данные в ViewData[...]
?Я пытаюсь выяснить лучшие практики для того, чтобы хранить данные в этом наборе, и я не уверен, безопасно ли хранить определенные для пользователя данные в HttpContext.Current.Items
.
Один пример использования передает пользовательские кредиты от основного контроллера OnActionExecuting(...)
использоваться в Controller
вычисления и для дисплея в Views
; Я знаю, что должен использовать ViewData
для этого, но у меня были некоторые непоследовательные результаты с вложенными частичными представлениями.
Это было бы корректно для высказывания этого HttpContext.Current.Items[...]
к Controllers
как ViewData[...]
к Представлениям?
HttpContext.Current.Items
действует только на время запроса, но является глобальным для всего в этом запросе.
Очевидно, что сеанс длится в течение всего сеанса пользователя и сохраняется между запросами.
Вы сможете определить, какой из них вам нужно использовать, основываясь только на этих критериях. Я бы не рекомендовал использовать HttpContext.Current.Items
, поскольку он, как правило, является своего рода «глобальной переменной», и, как правило, задействуются строки волшебных ключей, но иногда вам действительно нужно их использовать.
Кроме того, хотя ваше сравнение между .Items и ViewData довольно уместно, .Items отличается от поведения ViewData, потому что каждое View, участвующее в запросе (частичное или иное), получает свою собственную копию ViewData.
Разница в поведении очевидна, когда вы выполняете RenderPartial
и пытаетесь добавить что-то в ViewData - когда вы возвращаетесь к родительскому представлению, элемента там нет.