HttpContext.Current.Items[...]
与存储ViewData[...]
中的数据?我正在尝试找出在此集合中存储数据的最佳做法,我不确定在HttpContext.Current.Items
中存储用户特定数据是否安全。
一个用例是从基础控制器的OnActionExecuting(...)
传递用户信用,以便在Controller
计算中使用并显示在Views
中;我知道我应该使用ViewData
,但是我对嵌套的部分视图有一些不一致的结果。
HttpContext.Current.Items[...]
与 Controllers
一样 ViewData[...]
是否正确?到观看次数?
答案 0 :(得分:21)
HttpContext.Current.Items
仅持续请求的持续时间,但它对该请求中的所有内容都是全局的。
会话显然持续整个用户的会话,并在请求之间持续存在。
您应该能够根据这些标准找出您需要使用哪一个。使用HttpContext.Current.Items
并不是我所推荐的,因为它往往是一种“全局变量”,并且魔术键字符串往往会涉及,但有时你真的需要使用它。
此外,尽管.Items和ViewData之间的比较非常简单,但.Items与ViewData的行为方式不同,因为请求中涉及的每个View(部分或其他)都获得了自己的ViewData副本。
当您执行RenderPartial
并尝试向ViewData添加内容时,行为差异很明显 - 当您返回父视图时,该项目不存在。