2013-05-16 62 views
0

我需要兩項行動結果之間傳遞一些數據,所以我想我會嘗試TempData(我真的很新的MVC這樣忍耐一下)。這是我試過的:int爲null但TempData不是?

public ActionResult Edit(Companies companies, HttpPostedFileBase file) 
     { 
      if (ModelState.IsValid) 
      { 
       try 
       { 
        if (file != null) 
        { 
         //Do stuff with file, save changes to database etc. 

         TempData["Companies"] = companies; 

         return RedirectToAction("bgcTest2", "Companies"); 

現在存儲了臨時數據。並檢索它:

public ActionResult bgcTest2(string BolagsID, Companies companies) 
     { 
      try 
      { 
       companies = TempData["Companies"] as Companies; 
       int test = companies.BolagsID; 

現在,這裏的問題; companies.BolagsID有一個值,但test始終爲空。爲什麼?我該如何解決它?

編輯:

我注意到一個相當奇怪的事;當試圖達林Dimitrovs建議,並可能做我嘗試藏漢的時候,如果我把一個斷點只在它返回空值它不會破壞後才行線。就好像該行被註釋掉並且根本不執行一樣。歡迎來到暮光之城。

EDIT2:

以2:

[HttpPost] 
     public ActionResult Edit(Companies companies, HttpPostedFileBase file) 
     { 
      if (ModelState.IsValid) 
      { 
       try 
       { 
        if (file != null) 
        { 
         // non related stuff 

         return RedirectToAction("bgcTest2", "Companies", new {BolagsID = companies.BolagsID}); 

和:

[Authorize] 
     public ActionResult bgcTest2(int BolagsID) 
     { 
      try 
      { 
       int test = BolagsID; 

我仍然得到的是 「測試並不在當前的背景下存在」。

EDIT3:

取2個工作正常。我的變量是null,因爲我從來沒有在任何地方使用它們。我認爲我一次只能採取一步,但很明顯,在某些情況下,您必須採取幾個步驟才能看到它們中的任何一個。

教訓:一定要使用聲明的變量,否則會null

+0

如何'test'爲null,它'int'不是'詮釋?'? – Habib

+0

我不知道,但是在調試時,「int test」中的「添加監視」給了我null。這是奇怪的事情。 –

+0

您是否檢查天氣公司從TempData [「Companies」]有一些價值? –

回答

2

我會建議,因爲它依賴於會話你不使用的TempData。如果你需要的是這個BolagsID然後簡單地把它作爲參數:

public ActionResult Edit(Companies companies, HttpPostedFileBase file) 
{ 
    if (ModelState.IsValid) 
    { 
     try 
     { 
      if (file != null) 
      { 
       //Do stuff with file, save changes to database etc. 
       return RedirectToAction("bgcTest2", "Companies", new { BolagsID = companies.BolagsID }); 

然後:

public ActionResult bgcTest2(int bolagsID) 
{ 
    ... use the bolagsID here directly 
} 

不幸的是你不能通過使用這種方法複雜的對象。但是,您可以將此對象保存在數據存儲中,並僅將該ID傳遞給目標控制器操作,以便在重定向後從此數據存儲中檢索該對象。

+0

使用你的例子仍然給我「名字'測試'在當前上下文中不存在」,當看着它。( –

+0

)你在哪裏看到'test'在我的回答中發佈的代碼示例中? –

+0

哦,對不起,你在哪裏寫的「...直接在這裏使用bolagsID」我試過'int test = bolagsID;',只是看看我是否會得到一個值 –

相關問題