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 の永続化で何が起こっているのかをよりよく理解するのに役立つポインタを誰かが提供できますか?