2014-01-31 47 views
4

我正在開發Web應用程序。我有一個向用戶顯示數據的網格。當用戶點擊網格的任何一行時,它會將用戶重定向到另一個頁面,因爲我們在一列上有一個asp鏈接控件。 問題在asp.net中回發和瀏覽器後退按鈕問題

我的代碼是這樣

if (!Page.IsPostBack) 
      { 
       //CODE 
      } 

當在瀏覽器後退按鈕的用戶點擊,它不執行代碼。只需顯示來自CACHE的數據。 如何在瀏覽器後退按鈕上單擊執行CODE?

回答

2

這是ASP.Net的全球性問題。大多數開發人員認爲像Windows開發人員。它主要以任何操作(包括導航操作)的回傳結束。

爲了解決這樣的問題:

  • 避免使用按鈕來改變頁面。與目標網址生成超鏈接。
  • 在更新面板中包裝頁面的部分內容。好處是瀏覽器在每次回發後都不會看到頁面更改。然後,您將能夠在不發出警告對話框的情況下「刷新」該頁面
  • 當填充網格時,不是從代碼開始「選擇」一行,而是生成鏈接到URL中具有「?ID = 42」的同一頁面,並將此值作爲選定值綁定到網格

此「惡意」行爲的根本原因是使用HTTP Post請求發佈回發。然後,瀏覽器需要重新發布頁面以重建它。

使用上面提到的技術,您正在發出GET請求。這種請求不需要重新提交任何內容。

+0

downvoting的原因: 同意我們不使用回傳導航的部分。其餘的有點不符合整個asp.net框架的想法,它確實[嘗試]功能像winforms開發,我們在回發中做我們的行動.... –

1

嘗試禁用不想緩存的頁面的瀏覽器緩存。

protected void Page_Load(object sender, EventArgs e) 
{ 
    Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1)); 
    Response.Cache.SetValidUntilExpires(false); 
    Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches); 
    Response.Cache.SetCacheability(HttpCacheability.NoCache); 
    Response.Cache.SetNoStore(); 

    if (!Page.IsPostBack) 
    { 
      //CODE 
    } 
}