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