将数据表从一个aspx页面传输到另一个C#

将数据表从一个aspx页面传输到另一个C#,c#,asp.net,datatable,transfer,C#,Asp.net,Datatable,Transfer,我有一个问题,我希望有人能回答,将Datatable传输到另一个.aspx页面的最佳方式是什么,这样它就可以在C#中收集并绑定到Gridview 饼干 会议 缓存 饼干-绝对不是。 会话-可能,取决于服务器上的用户数/负载。 缓存-可能不是一个好主意,除非同一个网格被许多用户查看(即数据被缓存) 您能否向另一个页面提供一些信息,使该页面能够获取gridview本身的数据?可能是像querystring参数这样简单的信息,例如productId=10 另外,请阅读ASP.NET中的相关内容。如果

我有一个问题,我希望有人能回答,将Datatable传输到另一个.aspx页面的最佳方式是什么,这样它就可以在C#中收集并绑定到Gridview

  • 饼干
  • 会议
  • 缓存
饼干-绝对不是。 会话-可能,取决于服务器上的用户数/负载。 缓存-可能不是一个好主意,除非同一个网格被许多用户查看(即数据被缓存)

您能否向另一个页面提供一些信息,使该页面能够获取gridview本身的数据?可能是像querystring参数这样简单的信息,例如productId=10


另外,请阅读ASP.NET中的相关内容。

如果执行重定向到另一个页面,则
会话是一个好地方。但是如果
数据表
的重建成本不太高,我可能会向数据库发送一个新的查询。

这取决于数据表的内容

我会排除cookie,因为它迫使您将所有数据传输到客户端并返回(猜测如果它是一个数据表,它可能有很多记录)

会话和缓存都可以工作,但考虑到它们可能会存储在内存中,只要用户保持会话处于活动状态


如果查询不需要长时间执行,我会考虑再次运行它。

您可以在VIEWSTATE中序列化它。

会话将是最好的选择。

没有单一的“最佳”-因为它将取决于应用程序的结构和要传输的数据块的大小。这也将取决于你在两端做什么

在最基本的层面上,答案是会话状态-cookies是不合适的,因为(概括)您想要移动的数据块太大。缓存的存在是为了避免您必须重新加载东西,但是(再次概括)当您返回查看剩下的会话时,不应该将它用于您需要的东西

当然,这假设您保留了datatable。另一种方法是只维护允许您从存储中检索datatable的键值-因此您在第一页加载一次表,执行填充,保留键值,导航到第二页,从存储中重新加载datatable,然后执行所需的更新。从概念上讲,这是一个更好的模型(它是开销或将表序列化/反序列化到会话与从数据存储中提取数据之间的折衷,当然,数据存储和应用程序之间是缓存数据的适当机会),如果您沿着这条路走,您可以使用会话,或者,如果您愿意,一个cookie,它反过来将您从对会话的依赖中解放出来


正如我所说的,简单、实用的答案是在会话中-但是您需要注意开销和其他约束。

这是一件可以通过公开保存数据表的属性来完成的事情。另一种选择是在下一页再次填充datatable,如果这样做成本不太高的话。缓存和会话,我认为,将是昂贵的。Cookie绝对不是一个选项,因为它将向客户端公开所有内容。

在视图状态下存储更多数据将在页面呈现期间增加页面大小。视图状态特定于一个页面。其次,它将向客户端发送和从客户端发送大数据,这将使页面响应变慢。可以使用跨页张贴。数据将仅与DataTable一样大,因此需要进行判断。缓存不是最佳选项,因为您无法保证数据仍然存在。缓存是最差的选项。这是不稳定和不可预测的。当服务器检测到内存压力时,可以随时删除项,这可能发生在页面传输之间。它也不适合支持多个请求,每个请求都需要自己唯一的缓存密钥。使用Session、ViewState或persist到数据库。@solairaja-不要紧,这显然不是缓存的目的,因此,在应用程序加载时,使用asp.net缓存可能会在某些时候产生奇怪的错误。是的,它可能会工作,但这并不意味着它是正确的或可接受的。@cxfx-我认为缓存是继cookies之后最糟糕的选择。决定会话和缓存的另一个因素是:会话是用户特定的,而缓存是应用程序范围内的。因此,缓存中存储的项目对所有用户都是可见的,这对于会话来说是不可见的。@Hans-我完全没有注意到这一点,尽管它很明显会造成伤害(嗯,这取决于你如何设置关键帧)。我们应该记住这一点。