2011-09-16 48 views
3

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

我会大量感谢您的帮助。

+1

对象的集合是一个对象... –

回答

3

你可以存储在服务器端,客户端会话列表<>实例。然后在每个请求中,您将有权访问会话中的列表。

但是,你仍然应该能够在你的名单<使用视图状态,只要项目>是序列化的。

在使用viewstate时,您应该考虑在浏览器和Web服务器之间交换的数据量。如果你的项目不是不合理的大,你不会有太多的列表中,那么viewstate可能并不合理。

代码可能看起来像这样。

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

注:Session变量也可能需要根据服务器的配置可序列化。 – 2011-09-16 16:40:44

+0

嗨克里斯。我刚刚更新了您提出的对我所做的更改,但仍然出现错误。你可以检查一下吗?非常感谢好友 – aleafonso

+0

完成!非常感谢 – aleafonso

-1

你可以使用,如果你想使用列表使它一流水平的变量,然后它不会失去价值后后持有的价值类级别的变量。

+0

-1:这完全不符合ASP.NET工作 –

4

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

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