重定向时,Controller方法参数为空

时间:2012-06-27 14:14:49

标签: c# asp.net-mvc

这有效:

    [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作业应该是空的,当它应该有一个计数&gt; 0

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

1 个答案:

答案 0 :(得分:3)

RedirectToAction会向客户端浏览器返回302响应,因此浏览器会对指定的网址进行新的 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对象来存储数据。但是一旦读取数据,数据就会终止。