如何在回发</object>之后保留全局变量List <object>的值

时间:2011-09-16 16:14:18

标签: c# asp.net collections global-variables

我先看过这个问题:retain value after page refresh。但似乎它不适用于集合,因为ViewState只存储一个值。我需要使用该集合,因为我不知道用户将创建多少个对象实例。因此,ViewState不是一个选项。我也尝试过使用静态变量,但它存储的值比我需要的时间长(我在这里找到了解释:http://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/3664cd62-46c7-4098-88a7-c09647673096)。

我非常感谢你的帮助。

3 个答案:

答案 0 :(得分:4)

通常使用会话状态对于lare对象更好,但是您也可以在ViewState中存储任何可序列化的对象(http://msdn.microsoft.com/en-us/library/ms972976.aspx)。

注意:请避免在ASP.Net中的静态属性中使用存储数据,因为这些值在所有请求中共享。注意注意 - HttpContext.Current不是真正的静态对象(每个请求对象)。

答案 1 :(得分:3)

您可以存储列表&lt;&gt;服务器端的客户端会话中的实例。然后,在每个请求中,您将可以访问会话中的列表。

但是,您仍然可以使用viewstate,只要列表中的项目&lt;&gt;是可序列化的。

使用viewstate时,您应该考虑浏览器和Web服务器之间交换的数据量。如果您的商品不是非常大,而且您在列表中没有太多商品,那么查看状态可能并非不合理。

代码可能看起来像这样。

private ArrayList GlobalList
{ 
  get 
  { 
     return ViewState["GlobalList"]; 
  } 
  set 
  { 
    ViewState["GlobalList"] = value; 
  } 
} 

答案 2 :(得分:-1)

如果你想使用List make it class level variable,你可以使用在post后保存值的类级变量,然后它就不会丢失该值。