【问题标题】:TempData won't destroy after second requestTempData 在第二次请求后不会销毁
【发布时间】:2012-10-10 09:07:23
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    只有当你阅读它:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-06
      • 1970-01-01
      • 2015-10-05
      • 1970-01-01
      • 1970-01-01
      • 2014-06-14
      • 2016-06-13
      • 2019-08-14
      相关资源
      最近更新 更多