tempdata を回避する別の方法があります。私が気に入っているパターンは、元のレンダリングと無効なフォームの再レンダリングの両方に対して 1 つのアクションを作成することです。次のようになります。
var form = new FooForm();
if (request.UrlReferrer == request.Url)
{
// Fill form with previous request's data
}
if (Request.IsPost())
{
if (!form.IsValid)
{
ViewData["ValidationErrors"] = ...
} else {
// update model
model.something = foo.something;
// handoff to post update action
return RedirectToAction("ModelUpdated", ... etc);
}
}
// By default render 1 view until form is a valid post
ViewData["Form"] = form;
return View();
多かれ少なかれそのパターンです。ちょっと疑似。これにより、フォームのレンダリング、値の再表示 (フォームには以前の値が入力されるため)、およびエラー メッセージの表示を処理する 1 つのビューを作成できます。
このアクションへの転記が有効であれば、別のアクションに制御を移します。
MVC のサポートを構築する際に、 .net 検証フレームワークでこのパターンを簡単にしようとしています。