2011-09-16 46 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對象)。