我有一个视图,我提交了一个表单,并根据结果我想重定向到一个动作。对应于和动作的视图是强类型的,它应该接受ResultsViewModel。
我正在尝试使用T4MVC传递ResultsViewModel。
以下是代码:
[HttpPost]
public virtual ActionResult AddEntity(string viewModel)
{
//Deserialize using Json.NET
var entity = JsonConvert.DeserializeObject<MyEntity>(viewModel);
var success = DoSomething(); //returns boolean
if(success)
{
var result = new ResultsViewModel { MyEntity = entity, MessageId = 1};
return RedirectToAction(MVC.MyController.ResultsPage(result));
}
var result = new ResultsViewModel { MyEntity = entity, MessageId = 2};
return RedirectToAction(MVC.MyController.ResultsPage(result));
}
public virtual ActionResult ResultsPage(ResultsViewModel viewModel)
{
return View(viewModel);
}
代码到达时
public virtual ActionResult ResultsPage(ResultsViewModel viewModel)
{
return View(viewModel);
}
viewModel始终等于null。
我知道我可以这样做:
return RedirectToAction("ResultsPage", new { viewModel = result });
编辑:我尝试了返回RedirectToAction(“ResultsPage”,新的{viewModel = result});我在viewModel中也得到了一个null。
但是我试图弄清楚为什么/如何使用T4MVC传递对象。
谢谢,
答案 0 :(得分:5)
使用TempData
[HttpPost]
public virtual ActionResult AddEntity(string viewModel)
{
//Deserialize using Json.NET
var entity = JsonConvert.DeserializeObject<MyEntity>(viewModel);
var success = DoSomething(); //returns boolean
if(success)
{
var result = new ResultsViewModel { MyEntity = entity, MessageId = 1};
return RedirectToAction(MVC.MyController.ResultsPage(result));
}
var result = new ResultsViewModel { MyEntity = entity, MessageId = 2};
TempData["Result"] = result;
return RedirectToAction(MVC.MyController.ResultsPage(result));
}
public virtual ActionResult ResultsPage()
{
ResultsViewModel model = (ResultsViewModel)TempData["Result"];
return View(model);
}