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

私の推測では、参照したにセッション変数を設定していると思います。

たとえば、Page_Load で変数を使用している場合、最初のクリックで値がFalseデフォルトになります (画像がレンダリングされません)。Page_Load イベントが終了すると、クリック イベント ハンドラーが起動し、セッション変数が に設定されTrueます。ただし、Page_Load は既に終了しているため、(2 回目のポストバックで) Page_Load が再度呼び出されるまで、画像は表示されません。

これは、ページのライフサイクルに細心の注意を払っていない場合に起こり得ることの一例にすぎません。コードが見えないため、論理エラーが発生している場所を正確に知ることは不可能です。

イベントの順序の詳細については、 ASP.NET ページのライフ サイクルを参照してください。


編集
ロジックの一部を Page_Load からPage_LoadCompleteイベントに移動する必要がある場合があります。通常、LoadComplete は、コントロール イベントを処理した後にデータ バインディングなどを行うのに最適な場所です。

以下のコメントであなたの質問に答えるために、セッション処理は実際には適切な場所にあります。どこで を呼び出しているかわかりGridView1.DataBind()ませんが、正しい場所にないコードである可能性が最も高いです。呼び出しを LoadComplete ページ イベントに移動するDataBindと、設定が完了します。

于 2012-10-08T18:17:22.233 に答える