2009-07-01 15 views
1

フォームを送信するときに、ユーザーに新しいビューを表示して、送信された結果を表示する(ビューモードを表示ビューに転送する)ようにしたいと思います。RedirectToActionでviewmodelを新しいアクションに渡すことができません

public class HomeController : Controller 
    { 
     private MyViewModel _vm; 
     ..... 

     // POST: /Home/Create   
     [AcceptVerbs(HttpVerbs.Post)] 
     public ActionResult Create(MyViewModel vm){ 
      //..... 
      //set up vm to temp data _vm 
      _vm = vm; 

      return RedirectToAction("DisplayData"); 
     } 
     // GET: /Home/DisplayData 
     public ActionResult DisplayData() 
     { 
      //get temp data for display 
      return View(_vm); 
     } 
} 

フォームを投稿したときに、VMを作成して一時的なデータ場所_vmに配置することができます。しかし、この_vmは別のアクションDisplayDataに送信することができますが、アクションDisplayData()ではnullです。同じコントローラでもアクションをリダイレクトすると_vmが失われているようですが、コントローラvar、アクションメソッドvarではなくです。

この問題を解決するにはどうすればよいですか?

答えて

3

コントローラーの新しいインスタンスを作成します。新しい要求であるため、見つかった場合はnullになります。 あなたは、VMを保存するためにTempDataをを使用することができ、TempDataを1つの要求のためのデータを持続するだけ

良い説明here

0

一つの良い方法は

return DisplayData(_vm) 

代わりの

RedirectToAction("DisplayData") 
を呼び出すことです

DisplayDataはとにかにモデルを受け入れるべきです。

+0

しかし、ポスト、リダイレクト、パターンを取得すると、 – redsquare

+0

RedirectToAction( "DisplayData")は現在のビューをポストアクションで戻します。 – KentZhou

+0

@KentZhou私はあなたを理解しているかわからない。リダイレクトするとHTTPの "Location"ヘッダーがブラウザにどこに行くかを知らせ、ブラウザはそのページのGETリクエストを行います。それはポストをしません。 – redsquare

関連する問題