2009-07-27 172 views
15

這裏發佈了一些類似的問題,但沒有一個能夠真正解決我的需求。後退按鈕刷新頁面

我有一個頁面上的項目列表,可以稱之爲masterlist.aspx。如果我點擊其中一個這些列表項,則會出現另一個頁面,即details.aspx?id = something。

出現的頁面在編輯模式下有一個formview控件。如果用戶想要編輯他們點擊編輯鏈接按鈕的數據,表單將被髮送到編輯模式,然後他們編輯數據並單擊保存按鈕,保存數據並將窗體視圖恢復到查看模式。

問題是,如果用戶使用瀏覽器後退按鈕返回到masterlist.aspx頁面,頁面不會更新,則會將其從瀏覽器緩存中取出。

我玩過HTTP頭緩存設置,但無法獲得適用於所有主流瀏覽器的任何內容。在某些瀏覽器上,我收到了網頁過期警告。另一個選擇是以某種方式觸發頁面刷新(或部分頁面刷新),當頁面加載使用客戶端代碼時,但我一直無法弄清楚如何做到這一點。

是否有任何其他方法或者有人使用上述兩種方法獲得成功,或者有什麼方法可以完全避免此問題。

+0

這是因爲ASP.net使用包含整個頁面的POST表單。我不知道如何解決這個問題,但它可能會幫助你。 – 2009-07-27 16:48:38

回答

31

我必須在瀏覽頁面需要從數據庫加載每個負載的目錄中這樣做,因爲當您點擊產品頁面時,它會呼叫第三方獲取更新的信息,然後保存它是否應該更新。當你點擊後退按鈕時,就像你說數據被重新加載一樣。我所做的是將其添加到頁面中,並且它在所有瀏覽器中都能正常工作。

public class ProductBrowser : Page 
{ 
    protected override void OnInit(EventArgs e) 
    { 
     Response.Cache.SetCacheability(HttpCacheability.NoCache); 
     Response.Cache.SetNoStore(); 
     Response.Cache.SetExpires(DateTime.MinValue); 

     base.OnInit(e); 
    } 
} 
+0

爲我的同事在鉻和6工作。 – Merritt 2010-04-27 22:03:26

0

那麼捕獲後退按鈕鍵盤事件怎麼樣,然後,而不是允許它做一個browser.history.back(),你可以做一個document.location(...)調用。

或者,您可以捕獲後退事件並觸發回傳,可以執行Response.Redirect(「yourpage」)。這將迫使瀏覽器爲指定頁面發出GET語句並使其刷新

0

使用Javascript可能無法提供完整的解決方案,但有一種解決方法。

http://www.boutell.com/newfaq/creating/backbutton.html

它使用多次迫使瀏覽器執行「前進」操作超時功能。即使有人點擊「後退」按鈕,它也會返回到實際頁面,從而使Back操作無效。它可能會導致閃爍。

+0

如果頁面上有任何表單元素(如登錄表單),請小心此方法。它有可能在用戶輸入字段時刷新頁面。 – 2009-10-19 16:12:50

0

我玩過HTTP頭緩存設置,但無法獲得適用於所有主流瀏覽器的任何內容。在某些瀏覽器上,我收到了網頁過期警告。

如何進入該列表頁面?如果您發出HTTP GET 阻止客戶端和代理緩存它,您將不會有任何問題導航回它(並且仍然獲得更新版本)。

這給服務器端緩存留下了空間(當這些項目中的任何一個發生改變時都會發生適當的失效)或者根本沒有緩存。