通过使用在RedirectToAction()的对象T4MVC [重复](Pass an objec

2019-10-16 21:20发布

可能重复:
通过从动作数据到另一个动作

我在我提交表单,并根据我想重定向到一个动作的结果的看法。 该correspondes并采取行动的看法是强类型的,它应该接受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);
    }

视图模型总是等于空。

我知道我可以做这样的事情:

return RedirectToAction("ResultsPage", new { viewModel = result });

编辑:我试图返回RedirectToAction( “ResultsPage”,新的{视图模型=结果}); 而我也在我的ViewModel得到一个空。

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

谢谢,

Answer 1:

使用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);
}


文章来源: Pass an object in RedirectToAction() using T4MVC [duplicate]