asp.net-mvc – TempData在第二个请求后不会被破坏

我在一个actionfilter中的第一个请求中为TempData提供一个值.
filterContext.Controller.TempData["value"] = true;

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

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

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

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

价值仍然存在.不应该在第二次请求之后破坏这个值?所有请求都是AJAX请求.

解决方法

Shouldn’t be this value destroyed after the second request ?

只有你阅读它:

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

相关文章

项目要求通过网站上传大文件,比如视频文件,通过摸索实现了文件分片来上传,然后后台进行合并。 使用了...
安装新版本的Nginx(vim /etc/yum.repos.d/nginx.repo) [nginx-stable] name=nginx stable repo baseu...
什么是 SignalR ASP.NET Core ASP.NET Core SignalR 是一种开放源代码库,可简化将实时 web 功...
在Windows下使用Docker,我们选择Docker Desktop这个软件,非常方便。 ## Docker Desktop介绍及安装 Do...
项目开始设计的是运行在windows下,所以一开始采用的是windows服务模式来获取多媒体文件信息,后来要求...
银河麒麟高级服务器操作系统V10是针对企业级关键业务,适应虚拟化、云计算、大数据、工业互联网时代对主...