2009-11-14 114 views
1

我有一個ASP.net頁面,其中包含用於過濾數據集的字段。當我應用過濾器(通過按鈕)時,結果加載正常。如果我導航到另一個頁面(在同一個會話中),然後回到頁面,我將在頁面加載時重新設置過濾器字段的值。顯示舊請求的ASP頁面

有時候,這些字段會很好地重置,有時它們會回到空白。似乎沒有任何真正的模式,他們什麼時候回來,以及什麼時候回來空白。請求/響應是否有可能被服務器緩存? (IIS),如果沒有,那麼可能是什麼問題?

回答

7

我同意別人這是緩存問題。如果你沒有發送適當的頭文件,那麼瀏覽器會緩存你的頁面。例如,如果您使用瀏覽器的「後退」按鈕返回到您的頁面,則這將由緩存加載,而不是從服務器加載。

爲了驗證這個地方的Page_Load方法的斷點,並等待它被擊中。爲了禁用,你需要做這樣的事情緩存:

Response.Buffer = true; 
Response.ExpiresAbsolute = DateTime.Now.Add(new TimeSpan(-1,0,0)); 
Response.Expires = 0; 
Response.CacheControl = "no-cache"; 
+0

不使用後退按鈕,所有的導航都是通過鏈接完成的。 – 2009-11-23 18:52:22

+0

同樣的事情也適用於鏈接。請嘗試調試應用程序並查看實際調用Page_Load方法的時間。 – kgiannakakis 2009-11-24 07:40:55

2

聽起來更像它被瀏覽器緩存。嘗試在頁面的HTML中包含no-cache metas。

+0

用Firebug,它說的響應是從緩存中0KB ,所以不,瀏覽器沒有緩存它們。 – 2009-11-14 21:17:06

+0

嘗試Ctrl + Refresh。也許有一個你不知道的上游代理? – Gregory 2009-11-14 21:32:03

+0

試過了,隨機性依然存在 – 2009-11-14 21:33:26

0
  1. 儘量清晰瀏覽器chache
  2. IISRESET -stop然後IISRESET -start 重新啓動IIS。
1

你將如何回到初始頁面,通過後退按鈕或點擊一個鏈接回去呢?使用「後退」按鈕時,除非您刪除頁面上的緩存,否則服務器端代碼不會始終運行。

+0

我實際上並不需要離開頁面。應用程序上有一個導航欄,如果我重新單擊該行爲發生時的相同頁面。 – 2009-11-23 18:51:44

1

如果您沒有使用Ajax(因此,瀏覽器與檢索數據沒有任何關係),它似乎確實是由於緩存或加載方式的錯誤數據。

作爲第一個測試,我會在頁面上添加一個簡單的,並在Page_Load方法上寫入日期和時間。如果有效,你肯定可以忽視緩存作爲問題的根源。

現在,如果在代碼中存在問題,您是否依賴Cookie(會話變量)URL參數或可以在使用該應用程序時更改的任何其他信息?

+0

是的,這些值存儲在會話變量中。我相信這是一個代碼問題,同時重置值。該應用程序在「門戶」環境下工作,並且正在手動處理變量。 – 2009-11-23 18:50:46

0

是否有可能在運行填充字段值的代碼之前或之後拋出異常?

0

一個比較快速的方式來告訴發生了什麼是在那裏檢索的東西從會話和故障排除地獄在那裏的一些斷點。

如果它發生在你看到會話中的東西被拉出來並沒有其他有趣的事情發生(例如美味的異常被吞噬在某處),那麼這意味着它是瀏覽器緩存問題(和祝你好運!)。

0

ViewState正以某種方式被緩存。如果它不是您的瀏覽器,那麼您是通過執行某種緩存的代理服務器進行連接的。
你是否確定你沒有使用InProc以外的會話狀態?

0

嘗試通過查詢字符串在您的頁面之間傳遞「過濾器」。

這將是證明(單程或其他),問題在於緩存/狀態的好方法,你可以看到最新實際上,傳入