将对象从一个动作方法传递到另一个动作方法.asp.net MVC 3

本文关键字:方法 另一个 asp net MVC 对象 一个 | 更新日期: 2023-09-27 18:19:24

我使用的是ASP。. NET和MVC 3在visual studio中,有一个关于将对象从一个动作方法(称为Search)传递到另一个(称为SearchResult)的问题。我尝试使用ViewData,但它没有坚持到视图的搜索结果。下面是我的代码片段,来自单个控制器。当从表单中收集数据并调用提交(因此[HttpPost]声明)时,'Search'被调用:

[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"仍然没有坚持到视图。发送Search_a对象到SearchResult视图的最佳方式是什么?

将对象从一个动作方法传递到另一个动作方法.asp.net MVC 3

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

如果TempData不够用(正如Eranga建议的那样),因为SearchResult在某种程度上不依赖于Redirect(尽管您可以通过检查来绕过它),那么您可能需要查看Request对象。您可以通过Request.Params将数据存储为查询参数之一。这可以利用Asp MVC拥有的ModelBinding过滤器链。