2012-06-19 49 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;