我在visual studio中使用ASP.NET和MVC 3,并且有一个关于将对象从一个动作方法(称为Search
)传递到另一个(称为SearchResult
)的问题。我尝试使用ViewData,但它没有坚持到ViewResult的视图。下面是我的代码片段,来自单个控制器。从表单收集数据并调用submit(因此[HttpPost]
声明)时,将调用“搜索”:
[HttpPost]
public ActionResult Search(Search_q Q){
// do some work here, come up with an object of type 'Search_a'
// called 'search_answer'.
ViewData["search_answer"] = search_answer;
return RedirectToAction("SearchResults");
}
public ActionResult SearchResult(Search_a answer)
{
return View(answer);
}
我也尝试使用RedirectToAction("SearchResults", new {answer = search_answer});
而不是上面调用RedirectToAction,但我的'search_answer'仍然没有坚持到View。将此Search_a
对象发送到SearchResult
视图的最佳方式是什么?
答案 0 :(得分:7)
您可以使用TempData传递对象。
[HttpPost]
public ActionResult Search(Search_q Q){
// do some work here, come up with an object of type 'Search_a'
// called 'search_answer'.
TempData["search_answer"] = search_answer;
return RedirectToAction("SearchResult");
}
public ActionResult SearchResult()
{
var answer = (Search_a)TempData["search_answer"];
return View(answer);
}
答案 1 :(得分:1)
如果TempData不够(Eranga建议的那样),因为SearchResult在某种程度上不依赖于重定向(尽管你可以通过检查来解决它),你可能想要查看Request对象。您可以通过Request.Params将数据存储为查询参数之一。这可以利用Asp MVC所具有的ModelBinding过滤器链。