MVC RedirectToAction()以任何方式将对象传递给目标动作?

时间:2011-09-29 13:59:13

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

当代码跳转到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) {      }

4 个答案:

答案 0 :(得分:4)

您实际上是在尝试使用控制器来进行数据访问。

将“GetCats”数据检索移动到您的业务层(服务对象,存储库,适合您的任何内容)。

然后,CreateProduct需要在那里两次(2个签名)。一个没有参数,您将从业务层调用“GetCats”并将其发送到视图。

另一个实现将使用HttpPostAttribute进行标记,并在参数中包含创建cat的所有必要信息。

这就是全部。简单易行。

答案 1 :(得分:2)

您可以在TempData中放置所需的任何项目,然后拨打RedirectToAction

答案 2 :(得分:1)

RedirectToAction只需向浏览器返回"302"代码,并带有要重定向到的网址。发生这种情况时,您的浏览器会使用该URL执行GET。

您的RouteValues需要简单。您无法使用路由值真正传递复杂的对象或集合。

答案 3 :(得分:1)

如果您不关心浏览器网址的更改,您可以

return CreateProduct(catList