13

我在 actionfilter 中的第一次请求时将值放入 TempData。

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

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

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

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

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

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

4

1 回答 1

36

不应该在第二次请求后销毁这个值吗?

只有当你阅读它:

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

如果您不从 TempData 读取值,它不会被驱逐。

下面是TempData.Itemsgetter 的定义方式:

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");
于 2012-10-10T09:08:37.497 回答