2012-07-05 55 views
2

我創建了一個簡單的示例來顯示我遇到的問題。在頁面上放置一個asp.net複選框,並在同一頁面上放置一個asp.net文本框。在後面的代碼中(使用vb.net),當複選框被選中時,將代碼顯示在文本框中,當複選框未被選中時,顯示一個空的文本框。很簡單,對吧?現在選中/取消選中複選框多次來回切換,文本框內容/無內容。一切正常 - 對嗎?用戶單擊後退按鈕時顯示的錯誤信息

現在點擊您的瀏覽器後退按鈕幾次。顯示的每個後退按鈕單擊的結果相反 - 複選框在文本框中未被檢查。複選框未選中,文本框中有文本。無論你把vb代碼放在哪裏(頁面加載,checkedchanged) - 相同的結果。

我在想它與保存在緩存中的頁面的時間有關。類似頁面的東西被保存在緩存中,而選中標記觸發「click」事件,但填充文本框的代碼尚未被觸發。然後,我可能會完全脫離標準,而且我做錯了事情很簡單。

任何想法/想法/幫助將不勝感激。

示例代碼:

ASPX:

<asp:CheckBox id="ChkBox1" runat="server" AutoPostBack="True" text="Sample" /><br /> 
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 

VB:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     If ChkBox1.Checked = True Then 
      TextBox1.Text = "Checked" 
     Else 
      TextBox1.Text = "" 
     End If 
    End Sub 

回答

3

這是事情應該是這樣。

瀏覽器記得每次回發到服務器。只要複選框狀態發生變化,您的頁面就會回覆。

當複選框狀態被選中時,文本框確實是空的。這是發生回發的時間。您的服務器端代碼設置文本值,並在瀏覽器中看到它。

但您的背部會記住您發送的內容,即選中的複選框和空文本。

保留情況發生在您取消選中時。

如果使用F5刷新其中一個後臺頁面,瀏覽器應該要求發回發佈數據。你會回到預期的狀態。

告訴瀏覽器不要緩存內容(如果你想瀏覽器忘記它): 不是VB代碼,但我相信你也會在VB.net上找到類似的功能。

context.Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1)); 
context.Response.Cache.SetCacheability(HttpCacheability.NoCache); 
context.Response.Cache.SetNoStore(); 
+0

行 - 感謝和良好的信息 - 這是有道理的,是沿着我的想法是怎麼回事。現在 - 我如何在真實世界的場景中處理這個問題?我無法讓用戶點擊後退按鈕並看到錯誤的複選框/文本框結果。 – user1375002 2012-07-05 11:36:42

+1

告訴瀏覽器不要緩存內容。 – nunespascal 2012-07-05 11:44:36

+0

你好。即使添加緩存的給定標題也會遇到同樣的問題,還有其他方法可以處理這種情況。在瀏覽器返回後,它應該顯示真實的數據,而不是顯示來自瀏覽器的緩存數據。 – Liquid 2016-07-14 09:57:05

相關問題