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);
    }

当我重定向到新操作时,ICollection 作业应该有一个计数 > 0 时为空。

任何人都知道为什么重定向会清空集合?

4

1 回答 1

3

RedirectToAction向客户端浏览器返回 302 响应,因此浏览器将对指定的 URL发出新的GET请求。

在这种情况下,如果你真的想在这两个(无状态)HTTP请求之间传递集合,你需要一些临时存储机制,比如TempData

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

并在其他 ActionMethod 中读取

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

TempData使用Session场景背后的对象来存储数据。但是一旦读取数据,数据就会终止。

于 2012-06-27T14:21:14.413 回答