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
4

1 回答 1

5

我的猜测是你在引用它之后设置你的 Session 变量。

例如,如果您使用 Page_Load 中的变量,那么在第一次单击时,默认值将是False默认值(导致您不渲染图像)。Page_Load 事件完成后,click 事件处理程序将触发,将会话变量设置为True. 但是,由于 Page_Load 已经完成,直到再次调用 Page_Load(在第二次回发时)之后,您才能看到图像。

这只是当您没有密切关注页面生命周期时可能发生的事情的一个示例。由于我们看不到您的代码,因此无法确切知道发生逻辑错误的位置。

有关事件顺序的详细信息,请参阅ASP.NET 页面生命周期。


编辑
您可能需要将一些逻辑从 Page_Load 移动到Page_LoadComplete事件。LoadComplete 通常是在处理完控件事件后进行数据绑定等的最佳位置。

要在下面的评论中回答您的问题,会话处理实际上是在适当的位置。我看不到您在哪里打电话GridView1.DataBind(),但很可能是该代码不在正确的位置。将DataBind调用移至 LoadComplete 页面事件,您应该已设置好。

于 2012-10-08T18:17:22.233 回答