我知道这个问题已被多次询问并回答,但没有一个解决方案适合我。
这是我的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);
但这不是一个好的解决方案,因为网址没有更新。我正在修改一些较旧的项目,而且使用Session
和Viewbag
很糟糕。
我需要简化以前代码中数据的视图和控制器通信模式是一团糟。是否可以在简单ViewData
中不使用Viewbag
或RedirectToAction
的情况下执行此操作。
为了实现这一点,任何形式的帮助都会很棒,因为我是MVC
的新手。
答案 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);
}