web-dev-qa-db-ja.com

特定のUpdatePanelが読み込まれた後にクライアント側のJavaScript関数を呼び出す方法

特定の更新パネルがロードされた後、クライアント側のJavaScriptメソッドをどのように呼び出すことができますか?

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler)は、更新パネルの読み込みが完了した後に起動するため、機能しません。クライアント側で、どれがどれであるかを見つける方法を見つけることができません。

ScriptManager.GetCurrent(Page).AsyncPostBackSourceElementID AsyncPostBackSourceElementIDこれはサーバー側オブジェクトであり、クライアント側が必要なため機能しません

ClientSide .Netフレームワークは、正しいコンテンツを更新するために、どのUpdatePanelを更新しているかを知る必要があります。確かにこのイベントにフックする方法はありますか?

任意の助けいただければ幸いです。

32
James

PageRequestManager.beginRequest イベントをフックして、 BeginRequestEventArgs.postBackElement プロパティを検査できます。

reallyはUpdatePanelを提供しないが、UpdatePanel内のコントロールを提供することに注意してください。それでも十分です。

編集:さらに良いことに、 PageRequestManager.pageLoaded イベントは PageLoadedEventArgs.panelsUpdated (および panelsCreated )プロパティを提供します。

13
Mark Brackett

ありがとうございます。どちらも良い答えです。最後に、クライアント側のスクリプト「ページロード」を使用しました。それはグーグルが私に明らかにしなかったかなり埋もれた方法です。興味がある人のために、このコードはFireBugと連携して、更新されたパネルを見つけるために動作するPageLoadedメソッドの優れたデモを提供します。

<script type="text/javascript">
        $(document).ready(function() {
            panelsLoaded = 1;
            Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(PageLoaded)
        });

        function PageLoaded(sender, args) {
            console.log("I have occured " + panelsLoaded++ + " times!");

            var panelsCreated = args.get_panelsCreated();
            for (var i = 0; i < panelsCreated.length; i++) {
                console.log("Panels Updating: " + panelsCreated[i].id);
            }

            var panelsUpdated = args.get_panelsUpdated();
            for (var i = 0; i < panelsUpdated.length; i++) {
                console.log("Panels Updating: " + panelsUpdated[i].id);
            }
        }
    </script>
48
James

これはあなたの解決策かもしれません。

UpdatePanelのOnLoadイベントのコードビハインドで、起動スクリプトを登録します。

string scriptText = "alert('Bar!');";

ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "foo", scriptText, true);
1
CountCet