2014-03-04 65 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

相关问题