2

これは機能します:

    [HttpPost]
    public ActionResult Slots(Slots slots, ICollection<int> jobNos)
    {
        if (!ModelState.IsValid)
            return View(new SlotsViewModel() { JobNos = jobNos, Slots = slots });

        //
        // Do stuff
        //

        return View("MyResults", jobNos);
    }

    public ActionResult MyResults(ICollection<int> jobs)
    {
        return View(jobs);
    }

ただし、これは機能しません。

    [HttpPost]
    public ActionResult Slots(Slots slots, ICollection<int> jobNos)
    {
        if (!ModelState.IsValid)
            return View(new SlotsViewModel() { JobNos = jobNos, Slots = slots });

        //
        // Do stuff
        //

        return RedirectToAction("MyResults", new { jobs = jobNos });
    }

    public ActionResult MyResults(ICollection<int> jobs)
    {
        return View(jobs);
    }

新しいアクションにリダイレクトすると、カウントが0より大きいはずのICollectionジョブが空になります。

リダイレクトするとコレクションが空になる理由を誰かが知っていますか?

4

1 に答える 1

3

RedirectToActionクライアントブラウザに302応答を返すため、ブラウザは指定されたURLに対して新しいGET要求を行います。

この場合、これら2つの(ステートレス)HTTPリクエスト間でコレクションを本当に渡したい場合は、次のような一時ストレージメカニズムが必要です。TempData

TempData["Jobs"] =jobNos ;
return RedirectToAction("MyResults");

そして、他のActionMethodでそれを読んでください

public ActionResult MyResults()
{
  var model=TempData["Jobs"] as List<int>;
  return View(model);
}

TempDataSession舞台裏のオブジェクトを使用してデータを保存します。ただし、データが読み取られると、データは終了します。

于 2012-06-27T14:21:14.413 に答える