使用T4MVC在RedirectToAction()中传递对象

时间:2012-06-20 01:08:37

标签: c# asp.net-mvc-3 t4mvc

  

可能重复:
  pass data from Action To Another Action

我有一个视图,我提交了一个表单,并根据结果我想重定向到一个动作。对应于和动作的视图是强类型的,它应该接受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传递对象。

谢谢,

1 个答案:

答案 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);
}