3

インデックスアクションを持つHomeControllerがあるとしましょう。Index.cshtmlビューで、別のコントローラー(DocumentsController)のアクションにポストバックします。アクションが完了したら、Home/Indexにリダイレクトします。

ユーザーがIndex.cshtmlビューで送信したフォーム値を維持するための推奨/最もクリーンなアプローチは何ですか?別のコントローラーからリダイレクトされているとしたら?

編集:私は現在RedirectToActionを使用しています:

return RedirectToAction("Index", "Home");

では、このアプローチを使用して、フォームの値を保持するにはどうすればよいですか?

4

1 に答える 1

3

データをTempDataまたはSessionに保存し、を呼び出してから、またはRedirectToActionから値を取得できます。TempDataSession

TempData特別です。セッションにデータを保存しますTempDataが、保存されたデータは現在のリクエストと後続のリクエストでのみ保持されます。その後、データは破棄されます。必要なものに適しているように聞こえますが、データをより長く保持する必要がある場合は、Sessionを使用してください。

public class HomeController : Controller
{
    public ActionResult Index()
    {
         var someData = TempData["SomeData"] as string; // can be anything, using a string as an example;

         return View(someData);
    }
}

public class DocumentsController : Controller
{
    public ActionResult DoSomething()
    {
        TempData["SomeData"] = "Hello, world!";

        return RedirectToAction("Index", "Home");
    }
}

あなたが最初に訪問したときHome/Index"SomeData"は行方不明になります(null)。にアクセスすると、文字列にDocuments/DoSomething設定さ"SomeData"れ、にリダイレクトされますHome/Index。その時点で、Index配置した文字列が表示"SomeData"され、ビューで使用できますIndexただし、それ以降は、すべての一時データが消去されます。

したがって、たとえば、Indexリダイレクト後にユーザーが何度も更新した場合、更新中に一時データが失われます。それが受け入れられない場合は、TempDataを使用せず、代わりにセッションに保持してください。

于 2012-11-06T11:09:28.620 に答える