1


2

ASP.Net MVC2-投稿後、ユーザーが[戻る]ボタンを押した場合にフォームをクリアする方法

私のWebアプリでは、ASP.NET MVCフォームの[送信]ボタンをクリックした後、ユーザーにエラー画面または成功画面が表示されます。 エラーの場合、ユーザーはブラウザの「戻る」ボタンをクリックし、正しくないことを修正して、もう一度送信するように指示されます。

ユーザーが戻ってクリックしても、以前に入力したすべてのデータがさまざまなフィールドの画面に残っているため、これは正常に機能します。 ただし、成功画面の場合、ユーザーが[戻る]をクリックするとデータが消去され、誤ってデータを再送信することはありません。

ASP.NET MVCでこれをどのように行いますか?

1 Answer


1


これを実現する方法は、http://en.wikipedia.org/wiki/Post/Redirect/Get [Post-Get-Redirect]パターンを使用することです。 asp-mvc固有ではありませんが、Wikiにあるとおり

_ 特定の重複したフォーム送信を回避し、ユーザーエージェントがブックマークと更新ボタンを使用してより直感的に動作できるようにするWeb開発者向けの一般的なデザインパターン。 _

これを処理するために、背面をクリックするのは安全な方法ではありません。 一部のブラウザは、送信後にフォームの状態を維持しません。 このパターンは、「偶発的に再送信する」データの問題に直接対処します。

コードに関しては、http://www.arrangeactassert.com/how-to-unit-test-asp-net-mvc-controllers/ [Jag Reehal]によるコントローラーの単体テスト方法に関するこのブログ投稿をご覧ください。

[HttpPost]
public ActionResult Create(SomeViewModel model)
{
  if (ModelState.IsValid)
  {
     // do some stuff that saves your data and then...
     return RedirectToAction("Success");
  }
  else
  {
     // your model is not valid so return the form back to the user for
     // additional modifications.
     return View(model);
  }
}

注:上記ではデータの検証に `ModelState`を使用していますが、このパターンでも使用できる独自の検証およびエラーチェックルーチンのセットがある場合があります。