【问题标题】:ASP MVC RedirectToAction passing an array of objects without using ViewDataASP MVC RedirectToAction 传递对象数组而不使用 ViewData
【发布时间】:2011-08-02 23:37:49
【问题描述】:

我有以下方法

 public ActionResult Search(FormCollection form)
    {
         .......
        Publication[] publicationsResult = server.SearchLibrary(this.getSession(), sq);

        return RedirectToAction("BookListing", new { publications = publicationsResult });
    }

它从服务器获取发布列表并将其存储在发布类型的数组中。

我想在另一个页面显示结果,因此我重定向到以下方法:

public ActionResult BookListing(Publication[] publications)
    {
        Publication[] p = publications;
        return View(publications);
    }

我还定义了以下路由:

routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Library", action = "Search", id = UrlParameter.Optional } // Parameter defaults
        );

        routes.MapRoute(
            "PublicationListing", // Route name
            "{controller}/{action}/{publications}", // URL with parameters
            new { controller = "Library", action = "BookListing", publications = UrlParameter.Optional } // Parameter defaults
        );

Search 中,publications 数组填充了超过 13000 个对象,但是当我重定向到 BookListing 时,传递了 null。

有没有办法使用 RedirectToAction 将对象数组从一个操作方法传递到另一个操作方法?

谢谢。

【问题讨论】:

  • 你真的需要重定向用户吗?您可以从 Search 操作中返回 BookListing 视图。
  • 理想情况下是的,因为我希望用户能够为网址添加书签
  • 您实际上是在尝试将整个数组转换为可以在 URL 上传递的内容。这是行不通的,因为您在开始时 URL 中只有 256 个字符。
  • 您可以将搜索保存在数据库中并向用户返回该搜索的 ID,以便他们可以为结果添加书签或将搜索参数放入请求 /Search?title=Test&author=John 等。之类的东西——这样他们就可以为它添加书签。

标签: asp.net-mvc-2 redirecttoaction


【解决方案1】:

您始终拥有 TempData 集合。这在单个请求的操作重定向之间保持不变,因此为您提供存储这样的任何东西...

【讨论】:

  • 我正在寻找除 TempData 之外的另一种方式。但澄清一下,TempData 字典将只为一次重定向保存该数据?
  • 正确 - 临时数据仅在请求期间保留。
猜你喜欢
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-05
  • 1970-01-01
相关资源
最近更新 更多