4

私の MVC3 プロジェクトには、アクション間でデータを渡すために使用している TempData[] がたくさんあります。そして、Chrome を使用すると完全に機能します。しかし、IE では TempData[] 項目の値を取得できません。誰かが問題を知っていて、どうすれば解決できますか?

public class SomeController : Controller
{
    public ActionResult SomeAction()
    {
        TempData["id"] = "someData";
        return View();

    }
}


public class AnotherController : Controller
{
    public ActionResult AnotherAction()
    {
        string data = Convert.ToString(TempData["id"]);
        return View();

    }
}

`

4

2 に答える 2

5

TempDataに何かを格納するコントローラーアクションからビューを返さないでください。すぐに、それを使用することになっているコントローラーアクションにリダイレクトする必要があります。

public class SomeController : Controller
{
    public ActionResult SomeAction()
    {
        TempData["id"] = "someData";
        return Redirect("AnotherAction", "Another");
    }
}


public class AnotherController : Controller
{
    public ActionResult AnotherAction()
    {
        string data = Convert.ToString(TempData["id"]);
        return View();
    }
}

これは、TempDataが1つの追加リクエストに対してのみ存続するためです。したがって、たとえば、ビュー内でAJAXリクエストをコントローラーアクションに送信し(どちらに関係なく)、このビューにターゲットアクションを指すリンクがある場合、ユーザーがこのターゲットアクションにリダイレクトされると、TempDataは存在しなくなります。以前に行われたAJAXリクエスト中に失われたためです。

単一のリダイレクトより長くデータを保存する必要がある場合は、Sessionを使用できます。

于 2011-10-26T16:33:49.283 に答える
0

1 回のリダイレクトよりも長くデータを保存する必要がある場合は、Keep または Peek メソッドを使用する必要があります。

string data = TempData["id"].;
TempData.Keep("id");

または単に使用する、

string data = TempData.Peek("id").ToString();

ピーク機能は、後続のリクエストのために「TempData」を維持するようにMVCにアドバイスするだけでなく、読み取るのにも役立ちます。

于 2016-12-13T13:34:45.727 に答える