第二次请求后,TempData不会销毁

时间:2012-10-10 09:07:23

标签: asp.net-mvc asp.net-mvc-3 tempdata

我在动作过滤器的第一个请求中将值放入TempData。

filterContext.Controller.TempData["value"] = true;

之后第二个请求进来,我检查值

filterContext.Controller.TempData.ContainsKey("value")

价值在那里。然后第三个请求进来,我再次检查值

filterContext.Controller.TempData.ContainsKey("value")

并且该值仍然存在。在第二次请求后,这个值不应该被销毁吗?所有请求都是AJAX请求。

1 个答案:

答案 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");