2012-06-19 47 views
-4

在我的C#代码隐藏文件(.cs)中,我只有一个类,它是从System.Web.UI.Page派生的。该类包含字典数组。在按钮点击之一中,即在按钮点击事件处理函数中,我创建该类的对象并执行一些操作。现在,在另一个按钮上单击,我需要做其他事情,这需要属于在上一次按钮单击时创建的类的对象或实例的数据。我怎样才能做到这一点?我需要所有数据,尤其是属于该对象/类实例的字典数组。C#:如何使类变量持久

回答

3

HTTP是无状态的。所以没有直接的方法来做到这一点。

你可以做的是保存在一些存储机制,并在稍后访问它。您可以考虑DB tableSession等等

下面是一个例子,Session

​​

来存储你可以访问此在接下来的按钮单击事件这样

if(Session["ThatObject"]!=null) 
{ 
    YourClass object1=(YourClass) Session["ThatObject"]; 
    //now you can access object1 properties here. 
} 

它在会话中存储这么多项目并不是一个好主意,因为它会使服务器在会话存储在服务器中时哭泣。

+0

谢谢Shyju。这工作完美。但是现在我面临着另一个问题。在第一个按钮点击,我基本上动态地创建一个html表。该表格也包含一些复选框。现在一旦表格被渲染,用户可以选择其中一个或多个复选框。问题是,在页面重新加载之后,即在点击第二个按钮之后,我无法确定设置了哪个复选框。这是因为在渲染表格后,我将类变量存储在会话中。因此,在会话变量中,所有复选框始终处于未选中状态。任何解决方案我怎样才能存储这些复选框的状态呢? – user1465266

+0

@ user1465266您可以使用ajax创建服务器页面并更新存储器中的值(Session变量) – Shyju

+0

所以,您的意思是我需要使用ajax来更新存储在我的会话变量中的值?对不起,但我对.net和其他网络技术很陌生。你能否详细说明一下?谢谢... – user1465266

1

您可以使用静态声明,以便它在请求中保持不变。

static IDictionary<string,object> myPersistentDict; 

当然,你必须担心这种方法的线程安全。如果您使用.NET 4中,有一个内置在为您处理此字典类,ConcurrentDictionary

static ConcurrentDictionary<string, object> myPersistentDict;