在RedirectToAction MVC中传递复杂对象

时间:2015-05-17 07:37:21

标签: c# asp.net-mvc

我知道这个问题已被多次询问并回答,但没有一个解决方案适合我。

这是我的ViewModel:

public class FlightSearchResults
{
    public FlightSearch SearchModel { get; set; }
    public List<vwLowFareSearchResults> SearchResults { get; set; }
    public string TestString { get; set; }
    public DateTime TestDate { get; set; }
}

我正在使用这样的RedirectToAction

FlightSearchResults flightSearchResults = new FlightSearchResults();
flightSearchResults.SearchModel = model;
flightSearchResults.SearchResults = flights;
flightSearchResults.TestDate = DateTime.Now.AddDays(-2);
flightSearchResults.TestString = "Just Testing . . .";
return RedirectToAction("index", "flights", flightSearchResults);

我只在我的航班索引中获得此List<vwLowFareSearchResults> SearchResults属性,其他人都没有分配值。我已尝试过StackOverFlow上的一些线程的几个变体,如:

return RedirectToAction("index", "flights", new { SearchResults = flights, SearchModel = model });
return RedirectToAction("Result", "Dialog", new RouteValueDictionary(flightSearchResults));

我可以像这样返回视图:

return View("~/Views/Flights/Index.cshtml", flightSearchResults);

但这不是一个好的解决方案,因为网址没有更新。我正在修改一些较旧的项目,而且使用SessionViewbag很糟糕。

我需要简化以前代码中数据的视图和控制器通信模式是一团糟。是否可以在简单ViewData中不使用ViewbagRedirectToAction的情况下执行此操作。

为了实现这一点,任何形式的帮助都会很棒,因为我是MVC的新手。

1 个答案:

答案 0 :(得分:0)

这是我最近使用的一种方法。试试:-

        ... Previous code omitted.
        //In your controller action, save the data to TempData...
        TempData["FlightSearchResults"] = FlightSearchResults;

        return RedirectToAction("flights");
    }

    public ActionResult flights()
    {
        FlightSearchResults flightResults = TempData["FlightSearchResults"];

        return View(flightResults);
    }

我实际上使用NewtonSoft将对象序列化为字符串,然后在目标操作中再次返回。所以您可能想尝试类似...

using Newtonsoft.Json;
...
...

        ... Previous code omitted.
        //In your controller action, save the data to TempData...
        TempData["FlightSearchResults"] = JsonConvert.SerializeObject(FlightSearchResults);

        return RedirectToAction("flights");
    }

    public ActionResult flights()
    {
        string storedResults = TempData["FlightSearchResults"].ToString();

        FlightSearchResults flightResults = JsonConvert.DeserializeObject<FlightSearchResults>(storedResults);

        return View(flightResults);
    }