8

我知道这个主题已经在很多帖子中讨论过,但我就是无法解决。

在控制器内 ActionResult 内我想在 Session 中存储一个对象并在另一个 ActionResult 中检索它。像那样 :

    public ActionResult Step1()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Step1(Step1VM step1)
    {
        if (ModelState.IsValid)
        {
            WizardProductVM wiz = new WizardProductVM();
            wiz.Step1 = step1;
            //Store the wizard in session
            // .....
            return View("Step2");
        }
        return View(step1);
    }

    [HttpPost]
    public ActionResult Step2(Step2VM step2)
    {
        if (ModelState.IsValid)
        {
            //Pull the wizard from the session
            // .....
            wiz.Step2 = step2;
            //Store the wizard in session again
            // .....
            return View("Step3");
        }
    }
4

2 回答 2

17

存储向导:

Session["object"] = wiz;

获取向导:

WizardProductVM wiz = (WizardProductVM)Session["object"];
于 2012-08-09T14:20:18.757 回答
2

如果您只在下一个操作中需要它并且您打算再次存储它,您可以使用 TempData。TempData 与 Session 基本相同,只是它在下次访问时被“删除”,因此需要再次存储它,就像你已经表明你正在做的那样。

http://msdn.microsoft.com/en-us/library/dd394711(v=vs.100).aspx

但是,如果可能的话,最好确定一种方法来使用发布的参数来传递必要的数据,而不是依赖会话(临时数据或其他)

于 2012-08-09T14:19:48.957 回答