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検証フレームワークでこのパターンを簡単にしようとしています。