我在动作过滤器的第一个请求中将值放入TempData。
filterContext.Controller.TempData["value"] = true;
之后第二个请求进来,我检查值
filterContext.Controller.TempData.ContainsKey("value")
价值在那里。然后第三个请求进来,我再次检查值
filterContext.Controller.TempData.ContainsKey("value")
并且该值仍然存在。在第二次请求后,这个值不应该被销毁吗?所有请求都是AJAX请求。
答案 0 :(得分:33)
第二次请求后,该值是否应该被销毁?
只有你阅读它:
var value = filterContext.Controller.TempData["value"];
如果您没有从TempData读取值,则不会被驱逐。
以下是TempData.Items
getter的定义方式:
public object get_Item(string key)
{
object obj2;
if (this.TryGetValue(key, out obj2))
{
this._initialKeys.Remove(key);
return obj2;
}
return null;
}
注意只有在调用getter时才会驱逐该值,并且只有在集合中找到该值时才会驱逐该值。在您显示的代码中,您要做的就是检查TempData是否包含给定的密钥,但您还没有读取此密钥的值。
如果需要,您可以手动逐出TempData值:
filterContext.Controller.TempData.Remove("value");
还有一种方法可以让你在不删除它的情况下读取值:
var value = filterContext.Controller.TempData.Peek("value");