为什么参数在asp.net mvc中没有从一个控制器动作传递到另一个控制器动作?

时间:2012-05-13 19:43:47

标签: asp.net-mvc-3 controller action

我有这个方法AddSection

public ActionResult AddSection(string code, ArrayList added)
    {
        ArrayList list = added;
        if (list == null) list = new ArrayList();
        list.Add(Request["selected_section"]);
        return RedirectToAction("Details", new { code = code, added = list });
    }

哪个重定向到详细信息:

public ActionResult Details(string code, ArrayList added)
    {
        if (added == null) added = new ArrayList();
        return View(added);
    }

现在在Details操作中(如果它是从AddSection呈现的),“添加的”ArrayList永远不应该为null,因为它在AddSection中被初始化并传递给Details。 当我调试程序“添加”时,即使在AddSection之后呈现的操作,Details中的ArrayList也为null。

有人可以解释原因吗?

1 个答案:

答案 0 :(得分:1)

就像LukeP所说,它看起来像是一个副本,因为正如其他问题/答案所述,只有原始类型可以传递,而不是复杂类型。

要修改代码,您可以执行此操作

public ActionResult AddSection(string code, ArrayList added) {
    ArrayList list = added;
    if (list == null) list = new ArrayList();
    list.Add(Request["selected_section"]);
    TempData["ListOfValues"] = list;
    return RedirectToAction("Details", new { code = code});
}

public ActionResult Details(string code) {
    var added = (ArrayList)TempData["ListOfValues"];
    if (added == null) added = new ArrayList();
    return View(added);
}