2

ボタンが付いたASPXWebページがあります。ユーザーがこのボタンをクリックすると、リクエストがサーバーに送信され、ボタンクリックイベントハンドラーが実行されます。

Page.Loadに存在する必要のあるロジックがいくつかありますが、このロジックは、ボタンのクリックによってリクエストが送信されたかどうかによって異なります。ページのライフサイクルに基づいて、イベントハンドラーはページの読み込み後に実行されます。

質問:ページの読み込み時に、ページの読み込み後に実行されるイベントハンドラーを確認するにはどうすればよいですか?

4

3 に答える 3

6

@aktonの答えはおそらくあなたがすべきことですが、予約を外してライフサイクルの早い段階でポストバックの原因を特定したい場合は、ポストバックデータを調べてクリックされたものを特定できます. ただし、これは、イベント処理中に実行される実際の関数/ハンドラーを提供しません。

Buttonまず、 /以外のImageButton原因でポストバックが発生した場合、コントロールの ID は になります__EVENTTARGET。ポストバックが発生した場合、ButtonASP.NET が行う「かわいい」動作があります。他のすべてのボタンを無視して、クリックされたボタンだけがフォームに表示されるようにします。AnImageButtonは座標を送信するため、少し異なります。含めることができるユーティリティ関数:

public static Control GetPostBackControl(Page page)
{
    Control postbackControlInstance = null;

    string postbackControlName = page.Request.Params.Get("__EVENTTARGET");
    if (postbackControlName != null && postbackControlName != string.Empty)
    {
        postbackControlInstance = page.FindControl(postbackControlName);
    }
    else
    {
        // handle the Button control postbacks
        for (int i = 0; i < page.Request.Form.Keys.Count; i++)
        {
            postbackControlInstance = page.FindControl(page.Request.Form.Keys[i]);
            if (postbackControlInstance is System.Web.UI.WebControls.Button)
            {
                return postbackControlInstance;
            }
        }
    }
    // handle the ImageButton postbacks
    if (postbackControlInstance == null)
    {
        for (int i = 0; i < page.Request.Form.Count; i++)
        {
            if ( (page.Request.Form.Keys[i].EndsWith(".x")) || (page.Request.Form.Keys[i].EndsWith(".y")))
            {
                postbackControlInstance = page.FindControl(page.Request.Form.Keys[i].Substring(0, page.Request.Form.Keys[i].Length-2) );
                return postbackControlInstance;
            }
        }
    }
    return postbackControlInstance;
}   

とはいえ、コントロール/ページをリファクタリングして実行を遅らせることができれば、@akton によって提案されたパラダイムを使用すると、コードはよりクリーンで堅牢になります。

于 2012-09-05T01:36:09.370 に答える
3

問題に対するより良い解決策があるかもしれません。ページが最初にロードされ、ポストバックを使用している場合にのみコードを実行しますか? その場合は、 Page.IsPostBackプロパティを確認してください。コードを他のイベント ハンドラーの前に実行する必要がない場合は、イベント ハンドラーの後に発生するため、コードをOnPreRenderに移動します。

于 2012-09-05T00:19:57.193 に答える
1

これらは私を大いに助けました.グリッドビューから値を保存したかったのですが、PageLoad内にIsPostBackがあるため、グリッドビューをリロード/新しい値をオーバーライドしていました.

if (HttpContext.Current.Request["MYCLICKEDBUTTONID"] == null)

{ //Do not reload the gridview.

}

else { reload my gridview. }

ソース: http://bytes.com/topic/asp-net/answers/312809-please-help-how-identify-button-clicked

于 2013-08-21T10:19:37.040 に答える