当代码跳转到CreateProduct()时,填充的catList总是Count = 0,所以我认为它没有被传递。 考虑RouteValueDictionary不这样做?还有别的吗?
public ActionResult GetCats(int CatID)
{
List<Category> catList = new List<Category>();
if (CatID >= 0 )
{
catList = context.Categories.Where(x => x.PCATID == CatID).ToList();
}
return RedirectToAction("CreateProduct", "Admin", new { catList });
}
public ActionResult CreateProduct(List<Category> catList) { }
答案 0 :(得分:4)
您实际上是在尝试使用控制器来进行数据访问。
将“GetCats”数据检索移动到您的业务层(服务对象,存储库,适合您的任何内容)。
然后,CreateProduct需要在那里两次(2个签名)。一个没有参数,您将从业务层调用“GetCats”并将其发送到视图。
另一个实现将使用HttpPostAttribute进行标记,并在参数中包含创建cat的所有必要信息。
这就是全部。简单易行。
答案 1 :(得分:2)
您可以在TempData
中放置所需的任何项目,然后拨打RedirectToAction
。
答案 2 :(得分:1)
RedirectToAction只需向浏览器返回"302"代码,并带有要重定向到的网址。发生这种情况时,您的浏览器会使用该URL执行GET。
您的RouteValues需要简单。您无法使用路由值真正传递复杂的对象或集合。
答案 3 :(得分:1)
如果您不关心浏览器网址的更改,您可以
return CreateProduct(catList
)