Передайте объект в RedirectToAction(), используя T4MVC

Возможный дубликат:
передача данных из действия в Другое действие

У меня есть представление, в котором я отправляю форму и в зависимости от результатов хочу перенаправить на действие. Представление, соответствующее действию и, является строго типизированным и должно принимать ResultsViewModel.

Я пытаюсь передать ResultsViewModel, используя T4MVC.

Ниже приведен код:

    [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 всегда равен нулю.

Я знаю, что могу сделать что-то вроде этого:

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

РЕДАКТИРОВАТЬ: я попробовал return RedirectToAction("ResultsPage", new {viewModel = result}); и я также получаю ноль в моей модели представления.

Однако я пытаюсь понять, почему/как передать объект с помощью T4MVC.

Спасибо,


person lopezbertoni    schedule 20.06.2012    source источник
comment
Запустите скрипач и посмотрите, как выглядит URL-адрес перенаправления. Бьюсь об заклад, MyEntiy совсем не похож на то, что может жевать связующее по умолчанию. Кстати, второй вариант тоже вряд ли сработает, если не сработает первый. Можете ли вы подтвердить, действительно ли вы протестировали его, и он работает, или вы думаете, что он может работать?   -  person Andrew Savinykh    schedule 20.06.2012
comment
@zespri Спасибо, я запустил скрипач и нашел ошибку. По сути, я не могу передать такой объект, если не сделаю что-то, как предлагает Гейб. Здесь есть связанный пост: stackoverflow.com/questions/7597863/   -  person lopezbertoni    schedule 20.06.2012


Ответы (1)


Используйте 1_

[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);
}
person Gabe    schedule 20.06.2012