如何保留全局变量的值后回发

本文关键字:全局变量 何保留 保留 | 更新日期: 2023-09-27 18:09:02

我先看了这个问题:在页面刷新后保留值。但它似乎不适用于集合,因为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,让它成为类级别变量,这样它就不会丢失值。