代码之家  ›  专栏  ›  技术社区  ›  Mayo

在ASP.NET MVC 2中读取后保存临时数据

  •  3
  • Mayo  · 技术社区  · 14 年前

    在ASP.NET MVC2中, TempData words of Microsoft ...

    TempData的值持续到 它被读取或直到会话时间 出去。以这种方式保存TempData 启用重定向等方案, 因为TempData中的值是 超出一个请求。

    我想我明白了,但我在我的应用程序中遇到了一些不寻常的行为,其中 临时数据 值是可用的,不应该是可用的。一般来说,我有一个带有一系列动作的控制器,其中第一个动作设置 临时数据 值,接下来的几个操作读取并设置 临时数据 值,最后一个操作将读取TempData值。下面是伪代码。。。

    [HttpPost]
    public ActionResult Step1()
    {
      TempData["bar"] = foo;
      return RedirectToAction("Step2");
    }
    
    public ActionResult Step2()
    {
      var foo = TempData["bar"];
      TempData["bar"] = foo;
      return View();
    }
    
    [HttpPost]
    public ActionResult Step2()
    {
      var foo = TempData["bar"];
      TempData["bar"] = foo;
      return RedirectToAction("Step3");
    }
    
    public ActionResult Step3()
    {
      var foo = TempData["bar"];
      TempData["bar"] = foo;
      return View();
    }
    
    [HttpPost]
    public ActionResult Step3()
    {
      var foo = TempData["bar"];
      return RedirectToAction("AnotherAction", "AnotherController");
    }
    

    从未

    我唯一能让它消失的方法就是手动点击一个从 临时数据 .

    有谁能给我提些建议,帮助我更好地了解发生了什么事吗 在ASP.NET MVC2中的持久性?

    1 回复  |  直到 10 年前
        1
  •  10
  •   Mayo    14 年前

    我要把这个扔出去。。。

    RedirectToAction的返回类型为RedirectToRouteResult。这是由上述伪代码中的几个action方法调用的。

    根据这个 possibly outdated blog entry ...

    4.RedirectResult和RedirectToRouteResult总是调用 TempData.Keep()

    从操作中调用Keep() 方法确保没有任何项 in TempData在 阅读。可以使用第二个过载

    所以看起来我的TempData值被自动标记了。我通过在TempData中看到这些值显示在_initialKeys下来验证这一点。