我先看了这个问题:在页面刷新后保留值。但它似乎不适用于集合,因为ViewState只存储一个值。我需要使用集合,因为我不知道用户将创建多少对象实例。因此,ViewState不是一个选项。我也尝试过使用静态变量,但它存储的值比我需要的时间长(我在这里找到了解释:http://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/3664cd62-46c7-4098-88a7-c09647673096)。
我非常感谢你的帮助。通常使用Session状态对大对象更好,但您也可以在ViewState中存储任何可序列化的对象(http://msdn.microsoft.com/en-us/library/ms972976.aspx)。
注意:请避免在ASP中使用静态属性存储数据。Net作为值在所有请求之间共享。注意- HttpContext。当前对象并不是真正的静态对象(每个请求对象)。
可以将List<>实例存储在服务器端的客户机会话中。然后,对于每个请求,您都可以访问会话中的列表。
但是,只要List<>中的项是可序列化的,您仍然应该能够使用viewstate。
当使用viewstate时,你应该考虑在浏览器和web服务器之间交换的数据量。如果你的项目不是不合理的大,你不会在列表中有太多的项目,那么viewstate可能不是不合理的。
代码可能是这样的:
private ArrayList GlobalList
{
get
{
return ViewState["GlobalList"];
}
set
{
ViewState["GlobalList"] = value;
}
}
你可以使用类级别变量来保存post后的值,如果你想使用List,让它成为类级别变量,这样它就不会丢失值。