2014-03-04 61 views
1

我正在開發MVC應用程序。無法在同一控制器中將數據從一種方法傳遞到另一種方法

我想將數據從一個方法傳遞到另一個方法在同一個控制器。

但數據無法正常傳遞......

請檢查下面的代碼...我試圖通過從創建保存數據的方法的產品清單。

namespace StockWatchScreen.Controllers 
{ 
    public class OrderController : Controller 
    { 
     public class OrderProduct 
     { 
      public string SectionCode { get; set; } 
      public double Size { get; set; } 
      public double Thickness { get; set; } 
      public double Length { get; set; } 
      public double Quantity { get; set; } 
     } 

     public ActionResult Create() 
     { 
      List<OrderProduct> oProductList = new List<OrderProduct>(); 

      OrderProduct oProduct = new OrderProduct(); 
      oProduct.SectionCode = "123"; 
      oProduct.Length = "123"; 
      oProduct.Size = "123"; 
      oProduct.Thickness = "123"; 
      oProduct.Quantity = "123"; 
      oProductList.Add(oProduct);  
      }  

      return RedirectToAction("SaveData", oProductList);   
     } 

     public ActionResult SaveData(List<OrderProduct> oProductList) 
     { 
      ViewBag.ProductList = oProductList; 
      ViewBag.OrderNo = "12321#"; 
      return View(); 
     } 

     } 
    } 
} 

在SaveData方法中,oProductList列表顯示始終爲空。

是什麼原因?

回答

3

您需要返回:return SaveData(oProductList);。您不需要返回RedirectToAction,並且儘量避免在mvc中使用TempData使用TempData["oProduct"]不是很好的做法。 使用AjaxBeginForm你可以得到結果return SaveData(oProductList);,並把它放在你想要的位置。你也可以使用UpdateTargetId。

+0

我不確定這個工作,你不能像MVC中的方法那樣調用一個動作結果,在很多情況下臨時數據也很方便,因爲它是會話數據的臨時分配,所以這不是一個壞習慣會話。 – ssilas777

+0

爲什麼你不能像調用方法那樣調用ActionResult? – MDDDC

+0

請嘗試這樣做,如果我在這裏是正確的,它會返回'創建'視圖本身或一些錯誤。 – ssilas777

1

無法發送模型像這樣RedirectToAction,你應該這樣

 public ActionResult Create() 
     { 
      List<OrderProduct> oProductList = new List<OrderProduct>(); 
      OrderProduct oProduct = new OrderProduct(); 
      oProduct.SectionCode = "123"; 
      oProduct.Length = "123"; 
      oProduct.Size = "123"; 
      oProduct.Thickness = "123"; 
      oProduct.Quantity = "123"; 
      oProductList.Add(oProduct); 
      } 

     TempData["oProduct"] = oProductList; 
     return RedirectToAction("SaveData"); 
     } 

而在recieving控制器動作之間使用tempdata這個通信

public ActionResult SaveData(List<OrderProduct> oProductList) 
    { 
     ViewBag.ProductList = TempData["oProduct"] as List<OrderProduct> ; 
     ViewBag.OrderNo = "12321#"; 
     return View(); 
    } 

這是因爲RedirectToAction是執行301重定向,並且它實際上是客戶端向/SaveData操作發起Get請求。

+0

這工作......謝謝......但我仍然沒有得到它爲什麼顯示爲空?在其他控制器中,我使用了相同的函數,它的工作正常,區別在於,我在那裏使用了單個對象,並且在此處使用了對象列表... – bnil

+0

@ user1650894我想知道哪個答案對您真的起作用了。你接受的第一個答案是否真的爲你工作? – ssilas777

相關問題