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

Pet*_*ron 13 asp.net-mvc viewdata httpcontext

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

我试图弄清楚在这个集合中存储数据的最佳实践,我不确定是否可以安全地存储用户特定的数据HttpContext.Current.Items.

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

难道是正确的说,HttpContext.Current.Items[...]就是Controllers喜欢ViewData[...]就是意见

wom*_*omp 21

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

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

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

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

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