ユーザーがログインしていないシナリオで、TempDataを使用してモデルオブジェクトを保存するASP.NET MVC 3 Webアプリケーションに取り組んでいます。
フローは次のとおりです。
- 送信フォームを使用します。
- コード (特別なアクション フィルター) はモデルを TempData に追加し、ログオン ページにリダイレクトします。
- ユーザーは、TempData を読み取り、POST アクションを直接呼び出す GET アクションにリダイレクトされました
ステップ 3 の後、TempData がクリアされると思いましたか?
コードは次のとおりです。
[HttpGet]
public ActionResult Foo()
{
var prefilled = TempData["xxxx"] as MyModel;
if (prefilled != null)
{
return Foo(prefilled);
}
}
[HttpPost]
[StatefulAuthorize] // handles the tempdata storage and redirect to logon page
public ActionResult Foo(MyModel model)
{
// saves to db.. etc
}
次のような記事を見つけました。
- アイテムは、削除のタグが付けられている場合にのみ、リクエストの最後に TempData から削除されます。
- アイテムは、読み取られたときにのみ削除用にタグ付けされます。
- 項目は、TempData.Keep(key) を呼び出すことでタグ付けを解除できます。
- RedirectResult と RedirectToRouteResult は常に TempData.Keep() を呼び出します。
それを読んでそれTempData["xxx"]
は「読んだ」のではないので、削除のためにタグ付けする必要がありますか?
そして最後の1つは私に少し関係があります-私はPOST(PRG)の後にリダイレクトを行っているからです。しかし、これは避けられません。
「このアイテムを捨てる」と言える方法はありますか?TempData.Remove ? それとも私はこれを間違っていますか?