我正在开发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。
是什么原因?
答案 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
请求。