2012-01-05 10 views
2

Visual StudioでASP.NETとMVC 3を使用していて、あるアクションメソッド(Search)から別のアクションメソッド(SearchResult )。 ViewDataを使用しようとしましたが、SearchResultのビューには適用されませんでした。以下は、私のコードのスニペットです。 「検索」のデータがフォームから収集し、提出されたときに呼び出される(したがって[HttpPost]宣言)と呼ばれていますASP.NET MVC 3のあるアクションメソッドから別のアクションメソッドにオブジェクトを渡す

[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ビューに送信する最善の方法は何ですか。

答えて

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); 
} 
+0

これはうまくいきました、ありがとうEranga。 1つの潜在的な落とし穴は、コントローラーでDisposeの定義がオーバーライドされている(VSが自動生成されたCRUDコードで追加する傾向がある)場合、オブジェクトをビューで使用する前に破棄できることです。 – Jeyenne

1

のSearchResultはリダイレクトに多少依存しないためTempDataをは(あなたがそれを回避するためにチェックを持つことができますが)、(Erangaが提案するもの)十分でない場合は、Requestオブジェクトを見たいかもしれません。 Request.Paramsを使用してクエリパラメータの1つとしてデータを保存することができます。これは、Asp MVCが持つModelBindingフィルターチェーンを利用できます。

+0

ありがとう、私は提案、申し訳ありませんが、オブジェクトを見ていただきありがとうございます! – Jeyenne

+0

Response.Paramsは読み取り専用です - http://msdn.microsoft.com/en-us/library/system.web.httprequest.params.aspx – DeepSpace101

関連する問題