2012-02-21 9 views
2

私は次のコードを持っている経由でクラスを渡す方法:RedirectToAction

public ActionResult Index() 
    { 
     AdminPreRegUploadModel model = new AdminPreRegUploadModel() 
     { 
      SuccessCount = successAddedCount, 
      FailureCount = failedAddedCount, 
      AddedFailure = addedFailure, 
      AddedSuccess = addedSuccess 
     }; 
     return RedirectToAction("PreRegExceUpload", new { model = model }); 
    } 

    public ActionResult PreRegExceUpload(AdminPreRegUploadModel model) 
    { 
     return View(model); 
    } 

を私はPreRegExcelUploadにブレークポイントときに、モデルがヌルです。どうして?

答えて

1

Evgeny Levinの回答でSessionオブジェクトを使用する代わりに、TempDataを使用することをお勧めします。 約TempDataを参照してください。

Indexファンクションでreturn RedirectToAction(..)の代わりにreturn PreRegExceUpload(model);を呼び出すことでこれを修正することもできます。

0

使用セッション方式にモデルを渡す:URLパラメータが文字列であるため、

public ActionResult Index() 
{ 
    AdminPreRegUploadModel model = new AdminPreRegUploadModel() 
    { 
     SuccessCount = successAddedCount, 
     FailureCount = failedAddedCount, 
     AddedFailure = addedFailure, 
     AddedSuccess = addedSuccess 
    }; 
    Session["someKey"] = model; 
    return RedirectToAction("PreRegExceUpload"); 
} 

public ActionResult PreRegExceUpload() 
{ 
    var model = (AdminPreRegUploadModel) Session["someKey"]; 
    Session["someKey"] = null; 
    return View(model); 
} 

メソッドRedirectToAction()は、パラメータとして非プリミティブ型を取ることができません。

+0

メソッド間でオブジェクトを渡すセッション?次に、TempDataを使用する方が良いでしょう。しかし、私は正しく通過したい... – John

1

TempDataは、セッションの「スマートな」ラッパーにすぎず、同じように機能します。

これは4フィールドであるため、クエリ文字列で渡します。

可能であれば、常にこのセッションでセッション/ tempdataを試してみてください。

あなたの完全なコードは本当ですか?それは意味をなさないので。

データをPOSTしてデータベースに保存すると(通常は)、一意の識別子(通常は保存後に生成されます)を渡す別のアクションにリダイレクトされ、DBからフェッチして戻ります景色。

これははるかに優れた方法です。

シナリオをもう少し説明し、適切なコードを表示すると、私はさらに助けることができます。