我在这里发现了很多关于在viewstate中存储值的问题,但还没有找到一个好的答案。会话而不是意见
我有一种情况,当我从数据库检索大量的数据。然后我根据自己的需要筛选和处理数据(所以这是一个非常重要的过程)。然后我把结果放在自定义类的列表中。例如让我们说这个类将是人
List<Person> persons = new List<Person>();
private void FillPersons()
{
//Call to webservice
persons = ws.GetPersonsList();
//Do all kind of custom filtering
//Manipulate the data
}
现在整个FillPersons()
方法是一个沉重的过程,返回的数据非常少。不幸的是,它不能移动到SQL和沉重的过程中,但这不是重点。
问题是我需要在页面之间重新使用这些数据。 现在为了免除对FillPersons()
的额外调用,我将Person类标记为serializeable,并将列表存储在viewstate中,除了由于视图状态而导致页面变为1mb大小这一事实以外,它工作正常。根据我所读到的,这是不可接受的方法,即它是不安全的,它吹的源代码使页面沉重等(第二个是我最关心的)
因此,它留给我一个会议。然而,会话不仅在回发之间持续存在,甚至在用户离开页面之后也会持续很久。或者最糟糕的是,会话将在用户决定回发之前结束。因此,找到会话寿命的最佳时间跨度是不可能的。
我的问题是在回发之间重复使用“数据集”的最佳做法是什么? 你们在这种情况下做什么?
谢谢。
PS:隐藏字段等不是一个选项。
获取列表这个人列表应用宽或过滤上当前登录的用户? – Magnus 2012-01-17 22:05:36
在您第一次检索它之后,您可以将它保存在其他地方吗?已过滤的数据集?如果是这样,您可以将它与一个唯一的密钥一起存储并仅将密钥发送给客户端。 – GemCer 2012-01-17 22:08:07
如何存储缓存数据的临时数据库表? – Holystream 2012-01-17 22:09:35