我有一个表单,当用户提交表单时,我想直接向用户显示提交的结果(将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。
如何解决此问题?
答案 0 :(得分:3)
它会创建一个新的控制器实例,因为它是一个新请求,因为您发现它将为null。 您可以使用TempData存储vm,TempData仅保留1个请求的数据
好的解释here
答案 1 :(得分:0)
一个好方法是打电话
return DisplayData(_vm)
而不是
RedirectToAction("DisplayData")
DisplayData应该接受一个模型。