2009-07-21 28 views
5

我想了解ASP.NET的OutputCache機制。
我建立了一個測試頁面,標籤和的LinkBut​​ton。
標籤文本被初始化的服務器上每個pageLoad的當前服務器日期:ASP.NET的OutputCache和回傳

protected void Page_Load(object sender, EventArgs e) 
{ 
    lblDate.Text = DateTime.Now.ToString(); 
} 

我用這個指令:<%@ OutputCache Duration="600" VaryByParam="none"%>

當我按下LinkBut​​ton的第一次,我得到一個新的文本在標籤,但如果我再次按下linkbutton我沒有得到一個新的文字。

我想這是因爲正在轉移到了爲每次回發同一服務器的參數。

有沒有辦法用OutputCach和回傳控制工作?

回答

6

對,就是你被NO參數改變,因此第一個請求的響應HTML緩存,並擔任在接下來的10分鐘(理論上)。如果你想緩存GET,但處理不同的POST,你應該根據你的POST PARAMS來改變。

讓我給你舉個例子。您有一個文本輸入用於在POST上發送包含其內容的電子郵件。如果您因該輸入名稱而異,則緩存時間範圍內的每個請求都會使用該文本輸入的不同值來觸發您的處理程序併發送電子郵件。

另一方面,你可能因*而異,但你會失去內核模式緩存。

+0

你可以發表一個熱的例子來使用我的發佈參數作爲VaryByParam嗎? – lnetanel 2009-07-21 16:52:42

+0

當然,<%@ OutputCache Duration =「600」VaryByParam =「YourPostParam1,YourPostParam2,(任何GET params也),...」%> – user134706 2009-07-21 17:17:31

+0

在找到這篇文章之前,我們發現了一個問題 - 因爲我們將VaryByParam設置爲「無」,而頁面發回給自己! – 2010-07-28 09:11:51

2

你在你的假設是正確的。

您的OutputCache指令告訴輸出緩存機制緩存整個呈現的頁面的特定URL,持續600秒。

在您的簡單示例中,您可能不使用任何查詢字符串,但是,該指令中的VaryByParam聲明允許您指定查詢字符串參數,以確保將該參數的每個不同值分開緩存。例如,如果您有:

<%@ OutputCache Duration="600" VaryByParam="ProductID"%> 

那麼這三種不同的URL將各自單獨的緩存,以及改變「產品ID」參數的東西沒有被高速存儲的值將確保在頁面處理和渲染正確的ASP.NET運行時:

http://www.example.com/viewproduct.aspx?ProductID=123 
http://www.example.com/viewproduct.aspx?ProductID=3 
http://www.example.com/viewproduct.aspx?ProductID=67 

在你的榜樣,您按一下按鈕,頁面已經被先前渲染(和緩存),當你回來後再次出現在你的URL沒有什麼區別回發並有效地重新加載,因此,ASP.NET運行時將顯示緩存頁面給你,而不需要經過e重新渲染它的過程。不是通過改變「的VaryByParam」參數的值,其他

,OutputCache指令是頗有幾分「全有或全無」的方式進行頁面緩存。有一個「VaryByContol」屬性的指令,但只能在ASP.NET用戶控件,而是一個完整的ASP.NET網頁中使用。

從您的問題,這聽起來更像是你需要調查部分頁面緩存。無論是這種機制還是一種在某些事件發生時使緩存無效的機制。這通常通過添加「緩存依賴」來完成。

對於這一點,以下鏈接應該有所幫助:

Caching Portions of an ASP.NET Page
Tip/Trick: Implement "Donut Caching" with the ASP.NET 2.0 Output Cache Substitution Feature
Programmatically Removing a Page from the OutputCache