2011-04-06 71 views
1

在aspx頁面的部分類中創建一個類的實例。在page_load或按鈕單擊方法下我試圖將該值設置爲類。但是當每次回發發生時,新的實例被創建並且我失去了以前的值。如何在asp.net中只創建一次類的實例

public partial class DatabaseSelection : System.Web.UI.Page 
    { 
     DBProperties dbpro; 
     Metadata obmeta;  

    protected void Page_Load(object sender, EventArgs e) 

     { 
      if (!IsPostBack) 
      { 
       dbpro = new DBProperties(); 

      } 

回答

3

如果需要這種情況下通過申請扔在應用程序或使用單例集合:

應用[「富」] =新MyClass的(); 查看其他答案。

如果你需要這個單個請求(這似乎不太可能在這裏):

HttpContext.Current.Items [ 「富」] =新MyClass的();

如果你需要這個跨請求,根據您的情況下所有選項的以下內容:

  • 序列化到的Cookie(會在每次請求轉移,所以如果管道是一個問題,不要用這個) 。適合每個用戶的數據。
  • Store in Session:Session [「Foo」] = new MyClass(); //我個人不喜歡這個選項,因爲隨着用戶羣的增長,它往往會增加你的內存壓力,但是如果它很小,那麼這是一個不錯的選擇,因爲它不會增加帶寬消耗和性能。適合每個用戶的存儲。數據庫或內存(和其他)的持久性可以配置。
  • 存儲在緩存中。好處是可以很好地控制生命週期,並根據您使用的密鑰來確定每個用戶的靈活性。
  • 存儲在ViewState中。良好的單個請求,可擴展,但增加有效載荷。
  • 存放在隱藏VAR(大致相同的ViewState)

我真的不知道我會建議Singleton模式。只要你的AppDomain有效地類似於應用程序變量,技術上的單例就會一直存在。

1

只需創建一個訪問會話狀態並嘗試返回它的方法(如果它已經存在)。如果沒有,則創建它,將其存儲在會話中並返回。

1

如果您希望該對象在回發之間持續存在,則需要將其存儲在會話/視圖狀態中或將其保存到數據庫中。

相關問題