2012-02-01 107 views
2

我有2個asp.net web表單。第一個包含ScriptManager,History,UpdatePanel和GridView;後者是ScriptManager,UpdatePanel和TextBoxes。這裏的前提是鏈接到可以編輯項目的詳細表單的列表。使用ASP.NET AJAX的WebForms:HyperLink與來自GridView的LinkBut​​ton&Response.Redirect

從GridView內部(UpdatePanel內部),如果我使用HyperLink控件並將URL設置爲編輯頁面(帶有必要的參數),請更改內容並保存,然後單擊後退按鈕我會看到原始內容列表沒有更新。按F5刷新顯示更改。

如果我在GridView中使用LinkBut​​ton,並且在代碼隱藏中處理該LinkBut​​ton以執行到同一編輯頁面(具有相同參數)的Response.Redirect,請進行相同的更改,保存並單擊後退按鈕,原始頁面上的列表將自動刷新以顯示我的更改。

請注意,編輯/保存發生的詳細信息頁面中的代碼不會更改 - 只會改變首次顯示的方式。

我的問題是:這是什麼關於Response.Redirect,導致頁面被點擊後退按鈕時刷新,它有可能複製這個直接的超鏈接方法?我更喜歡使用HyperLink方法,因爲我沒有看到回發的原因,但我希望在用戶瀏覽回來時刷新GridView。

謝謝。

+0

我添加的HTTP報頭和緩存標籤,所以我們可以在這裏找到一些關於這個主題的專家。 – pseudocoder 2012-02-01 21:33:10

回答

2

LinkBut​​ton會導致一個回傳,其響應是您的Response.Redirect在服務器端觸發的HTTP 302重定向命令。因此,您的網絡瀏覽器不會緩存舊版本的頁面。

Hyperlink控件簡單地呈現一個標準的<a>標籤,它將您帶到客戶端的詳細信息頁面。瀏覽器沒有理由相信該頁面可能已經改變,因此當您點擊後退按鈕時,它會顯示緩存的版本。

如果您想要告訴瀏覽器在使用後退按鈕時專門不緩存頁面,則 將使用緩存控制HTTP標頭。 W3C Link,

在任何情況下,您都應該在詳細信息頁面上提供鏈接(或接受更改時自動重定向),從而將用戶帶回到GridView /摘要頁面,因此他們不必訴諸於使用返回鍵。

編輯:

對不起,以前提供的頭例子是不是Asp.net,但基本上你想要做這樣的事情:

Response.AppendHeader("Cache-Control", "no-cache") 
+0

我曾看過提供鏈接以返回過去的列表;當用戶堅持能夠使用後退按鈕時,它們都會非常迅速地變得非常混亂。還有分頁等問題。你的解釋太棒了 - 謝謝。 – 2012-02-01 21:12:36

+0

@MartinRobins我添加了一些關於如何使用緩存控制HTTP頭的細節,以便使用具有所需效果的超鏈接控件。讓我知道它是否成功。 – pseudocoder 2012-02-01 21:14:06

+0

我嘗試過各種緩存參數的組合(現在包括我對你的「Wicket」例子的解釋 - Response.Headers.Add(@「Cache-Control」,@「no-cache,max-age = 0,must-revalidate ,no-store「);)都無濟於事。我得到的最接近的是瀏覽器告訴我,該頁面已過期,必須刷新! – 2012-02-01 21:24:38

相關問題