14

什么时候适合将数据存储在HttpContext.Current.Items[...]vs 将数据存储在ViewData[...]

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

一个用例是从基本控制器传递用户积分,OnActionExecuting(...)用于Controller计算和显示Views;我知道我应该使用ViewData它,但我有一些与嵌套局部视图不一致的结果。

说喜欢HttpContext.Current.Items[...]就是观点对吗?ControllersViewData[...]

4

1 回答 1

21

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

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

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

此外,虽然 .Items 和 ViewData 之间的比较非常恰当,但 .Items 与 ViewData 的行为方式不同,因为请求中涉及的每个 View(部分或其他)都有自己的 ViewData 副本。

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

于 2010-04-06T18:55:19.313 回答