1

可能重复:
将数据从动作传递到另一个动作

我有一个视图,我在其中提交表单,并根据我想要重定向到操作的结果。与 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 });

编辑:我尝试了 return RedirectToAction("ResultsPage", new { viewModel = result }); 而且我的viewModel中也有一个空值。

但是我试图弄清楚为什么/如何使用 T4MVC 传递对象。

谢谢,

4

1 回答 1

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);
}
于 2012-06-20T01:29:48.160 回答