2012-10-08 44 views
1

我使用下面的代碼來確定頁面是否應該顯示圖像或不。有時按鈕「有效」,但其他時候需要點擊2或3次才能顯示圖像。簡單的按鈕動作

我錯過了什麼嗎?

Private Sub btnViewAll_Click(sender As Object, e As System.EventArgs) Handles btnViewAll.Click 
    If Session("fullPage") IsNot Nothing Then 
     If CInt(Session("fullPage")) = 0 Then 
      Session("fullPage") = 1 
     Else 
      Session("fullPage") = 0 
     End If 
    Else 
     Session("fullPage") = 1 
    End If 
End Sub 

我檢查了這裏的會議:

Protected Sub GridView1_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles gvFolders.RowDataBound 

    If CInt(Session("fullPage")) = 1 Then 
     ...load images.... 
    End If 

End Sub 
+3

你的代碼在哪個方法檢查Session(「showImages」)? _Click事件觸發所有其他正常的頁面加載事件等,因此您可能沒有按照正確的順序包含所有內容。 –

+2

我認爲@ShawnSteward處於正確的軌道上,您應該查看asp.net頁面生命週期,以確保您在適當的狀態下設置和使用會話:http://msdn.microsoft.com/en-us/library /ms178472(v=vs.100).aspx –

+0

感謝您的鏈接。我正在Gridview RowDataBoundEvent中檢查會話...這是我顯示圖像的地方... – SkyeBoniwell

回答

6

我的猜測是,你是你設定會話變量後,你已經提到它。

例如,如果您正在使用Page_Load中的變量,則在第一次單擊時默認值爲False(導致您不顯示圖像)。 Page_Load事件結束後,點擊事件處理程序將觸發,將會話變量設置爲True。但是,由於Page_Load已經完成,直到Page_Load再次被調用(第二次回發)之後纔會看到圖像。

這只是當你沒有密切關注頁面生命週期時會發生什麼的一個例子。由於我們看不到您的代碼,因此無法確切知道邏輯錯誤發生的位置。

有關事件順序的更多信息,請參閱ASP.NET Page Life Cycle


編輯
您可能需要將一些你的邏輯與的Page_Load到Page_LoadComplete事件。在完成控制事件後,LoadComplete通常是進行數據綁定等的最佳位置。

要在下面的評論中回答你的問題,會話處理實際上是在適當的地方。我看不到你在哪裏打電話GridView1.DataBind(),但很有可能是代碼不在正確的位置。將DataBind調用移動到LoadComplete頁面事件,並且應該設置。

+0

我只在我的按鈕的onClick事件代碼中設置會話。 – SkyeBoniwell

+1

查看已更新的答案。 – JDB

+0

好的,我已更新我的代碼以反映空白會話。但它仍然有時需要多次點擊 – SkyeBoniwell