在HttpContext.Current.Items和ViewData中存储数据

时间:2010-04-06 18:44:39

标签: asp.net-mvc httpcontext viewdata

何时将数据存储在HttpContext.Current.Items[...]与存储ViewData[...]中的数据?

是否合适?

我正在尝试找出在此集合中存储数据的最佳做法,我不确定在HttpContext.Current.Items中存储用户特定数据是否安全。

一个用例是从基础控制器的OnActionExecuting(...)传递用户信用,以便在Controller计算中使用并显示在Views中;我知道我应该使用ViewData,但是我对嵌套的部分视图有一些不一致的结果。

HttpContext.Current.Items[...] Controllers 一样 ViewData[...] 是否正确?到观看次数

1 个答案:

答案 0 :(得分:21)

HttpContext.Current.Items仅持续请求的持续时间,但它对该请求中的所有内容都是全局的。

会话显然持续整个用户的会话,并在请求之间持续存在。

您应该能够根据这些标准找出您需要使用哪一个。使用HttpContext.Current.Items并不是我所推荐的,因为它往往是一种“全局变量”,并且魔术键字符串往往会涉及,但有时你真的需要使用它。

此外,尽管.Items和ViewData之间的比较非常简单,但.Items与ViewData的行为方式不同,因为请求中涉及的每个View(部分或其他)都获得了自己的ViewData副本。

当您执行RenderPartial并尝试向ViewData添加内容时,行为差异很明显 - 当您返回父视图时,该项目不存在。