在 ASP.NET MVC 2 中,TempData
值会一直存在,直到会话结束或被读取。用微软的话...
TempData 的值会一直存在,直到它被读取或会话超时。以这种方式持久化 TempData 可以实现重定向等场景,因为 TempData 中的值在单个请求之外可用。
我以为我理解了这一点,但我只是在我的应用程序中遇到了异常行为,其中一个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");
}
我的信念是,在读取一个值后,它将不再在 TempData 中可用。但是我开始单步执行代码,虽然键/值将在分配时添加到 TempData,但当我从 TempData 中提取值时(即使我到达不同的控制器) ,它永远不会消失。
我能够让它消失的唯一方法是手动点击一个从TempData
.
谁能提供任何指针来帮助我更好地理解TempData
ASP.NET MVC 2 中的持久性是怎么回事?