В ASP.NET MVC 2 значения TempData
сохраняются до завершения сеанса или до тех пор, пока они не будут прочитаны.В словах Microsoft ...
Значение 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?