无法通过RedirectToAction将viewmodel传递给新操作

时间:2009-07-01 13:33:03

标签: asp.net-mvc

我有一个表单,当用户提交表单时,我想直接向用户显示提交的结果(将viewmode数据传输到显示视图)。

public class HomeController : Controller
    {
        private MyViewModel _vm;
        .....

        // POST: /Home/Create        
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Create(MyViewModel vm){
           //.....
           //set up vm to temp data _vm
           _vm = vm;

           return RedirectToAction("DisplayData");
        }
        // GET: /Home/DisplayData
        public ActionResult DisplayData()
        {
           //get temp data for display
           return View(_vm);
        }
}

当我发布表单时,我可以创建vm并将其放到临时数据位置_vm。但是这个_vm可以被发送到另一个动作DisplayData,它在动作DisplayData()中是null。看起来即使在同一个控制器中重定向动作,虽然它是Controller var,但是_vm会丢失,而不是动作方法var。

如何解决此问题?

2 个答案:

答案 0 :(得分:3)

它会创建一个新的控制器实例,因为它是一个新请求,因为您发现它将为null。 您可以使用TempData存储vm,TempData仅保留1个请求的数据

好的解释here

答案 1 :(得分:0)

一个好方法是打电话

return DisplayData(_vm)

而不是

RedirectToAction("DisplayData")

DisplayData应该接受一个模型。