1

リダイレクト中に ModelState を保持するために TempData を使用します (MvcContrib 手法を使用)。これはうまくいきます。ただし、まれに、ユーザーがリクエストを中止し、すぐに別のメニュー項目を起動することがあります (たとえば、別のメニュー項目をすばやくクリックするなど)。これにより、所属していないそのページに ModelState エラーが表示されます。

問題は、TempData が Session に格納されていることです。これは、サーバーに最初に来るリクエストなど、どのリクエストでもそれを取得できることを意味します。

既知の回避策はありますか? たとえば、保存された ModelState とともに TempData に「宛先ページ」を保持します。

4

1 に答える 1

2

私の意見では、すぐにリダイレクトするアクションでのみTempData使用する必要があります。例えば:

public ActionResult Index()
{
    TempData["foo"] = "bar";
    return RedirectToAction("About");
}

public ActionResult About() 
{
    var foo = TempData["foo"];
    return View();
}

TempData に何かを格納することは避け、ビューをレンダリングする必要があります。

public ActionResult Index()
{
    TempData["foo"] = "bar";
    // bad :-(
    return View("About");
}

Session を使用して、探しているものを実現するか、正しいリクエストを識別できるようにする一意の ID を追加します。

代わりに使用できるもう 1 つの一般的な手法は、クライアントでモデルTempDataをシリアル化することです(ViewState の一種)。

于 2010-03-25T12:55:21.060 に答える