无法将数据从一种方法传递到同一控制器中的另一种

时间:2014-03-04 07:52:41

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我正在开发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列表显示为null。

是什么原因?

2 个答案:

答案 0 :(得分:3)

您需要返回:return SaveData( oProductList);。您不需要返回RedirectToAction,并尝试避免在mvc中使用TempData使用TempData["oProduct"]不是一种好习惯。 使用AjaxBeginForm成功后,您可以获得结果return SaveData( oProductList);并将其放在您想要的位置。也可以使用UpdateTargetId。

答案 1 :(得分:1)

你不能在RedirectToAction中发送这样的模型,你应该使用tempdata进行这样的行动之间的沟通

      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");
        }

在接收控制器中

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

这是因为RedirectToAction正在进行301重定向,实际上是客户端向Get操作发起/SaveData请求。