32

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

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

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

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

どんな助けでも大歓迎です。

4

3 に答える 3

48

ありがとう-両方の良い答え。最後に、クライアント側のスクリプト「pageloaded」を使用しました。それはグーグルが私に明らかにしなかったかなり埋もれた方法です。興味のある方のために、このコードは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>
于 2008-12-03T23:20:07.433 に答える
13

PageRequestManager.beginRequestイベントをフックして、 BeginRequestEventArgs.postBackElementプロパティを調べることができます。

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

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

于 2008-12-03T21:42:29.860 に答える
1

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

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

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

ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "foo", scriptText, true);
于 2008-12-03T21:41:02.687 に答える