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

use*_*126 13 asp.net-mvc tempdata asp.net-mvc-3

我在actionfilter中的第一个请求中将值放入TempData.

filterContext.Controller.TempData["value"] = true;
Run Code Online (Sandbox Code Playgroud)

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

filterContext.Controller.TempData.ContainsKey("value")
Run Code Online (Sandbox Code Playgroud)

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

filterContext.Controller.TempData.ContainsKey("value")
Run Code Online (Sandbox Code Playgroud)

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

Dar*_*rov 34

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

只有你读过它:

var value = filterContext.Controller.TempData["value"];
Run Code Online (Sandbox Code Playgroud)

如果您没有从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;
}
Run Code Online (Sandbox Code Playgroud)

请注意,只有在调用getter时才会驱逐该值,并且只有在集合中找到该值时才会驱逐该值.在您显示的代码中,您要做的就是检查TempData是否包含给定的键,但您还没有读取此键的值.

如果需要,您可以手动逐出TempData值:

filterContext.Controller.TempData.Remove("value");
Run Code Online (Sandbox Code Playgroud)

并且还有一种方法可以让您在不删除它的情况下读取值:

var value = filterContext.Controller.TempData.Peek("value");
Run Code Online (Sandbox Code Playgroud)