2011-11-01 127 views
-1

如何在頁面級緩存ASP.NET中的變量?也就是說,我想緩存在頁面加載循環中加載的所有變量,但是一旦頁面被完全加載,我想要轉儲該變量。在ASP.NET中緩存變量

更新:我希望數據緩存在服務器上。

+0

ViewState for single page,Session爲用戶的所有頁面 –

+0

您能解釋一下您的推理嗎? –

+0

我只關心使用ViewState和Session對象,因爲我擔心它們可能會與請求/響應一起發送。我真正想要的是將數據緩存在服務器上。 – Rafid

回答

3

這聽起來像你只需要在類級別聲明變量,例如:

public class MyPage : Page 
{ 
    private int _classVariable: 

    pageLoad() 
    { 
    _classVariable = 1; 
    } 
} 

除非我失去了一些東西明顯

+0

實際上你並沒有錯過任何東西,但事實是我沒有用ASP.NET做很多事情:-) – Rafid

2

在page_load中聲明的任何變量都將在該過程中可見並自動刪除。

其他頁面生命週期狀態所需的任何東西也可以存儲在Session變量(或視圖狀態,取決於它被訪問的位置)並在完成時刪除。

Session["value"] = value; 

ViewState["value"] = value; 
+0

如果在Page_Load中聲明它,它將在函數存在時被垃圾收集!我錯過了什麼嗎? – Rafid

+0

@promather是的,如上所述,如果您在頁面生命週期的多個階段需要它,請在第一次使用時加載並使用sessions/viewstate進行存儲,並在完成時將其刪除。就我個人而言,我會質疑爲什麼你首先嚐試這樣做。 – ChrisBint

+0

由於頁面基礎結構中存在導致從數據庫中獲取數千條記錄的問題,並且對於每條記錄,我們向遠程服務器發出請求以將記錄綁定到用戶。由於用戶只有250人左右,因此請求數千次而不是250次。 – Rafid

1

有一個字典,你冷用

Page.Items["variableName"] = yourObject; 

你可以從任何控制或用戶控制或頁面訪問它自己,它被撕碎t o整個頁面控制樹

但是,如果你不需要共享對象,或者你只是需要它在頁面代碼中的每個請求後面使私人領域,它將被設置爲默認的下一個請求,你可以改變它任何東西on Page_Load事件

1

您可以緩存current HttpContext中的項目,這些項目可在請求期間使用。

HttpContext.Current.Items["VariableName"] = value; 

這將持續生成網頁的壽命,但也可以用,可能希望與網頁互動(例如HTTP模塊)你的代碼的其他部分共用。

+0

這也是一個很好的解決方案。非常感謝。 – Rafid