web-dev-qa-db-fra.com

Comment appeler une fonction javascript côté client après le chargement d'un UpdatePanel spécifique

Comment est-il possible d'appeler une méthode javascript côté client après le chargement d'un panneau de mise à jour spécifique ?

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler) ne fonctionne pas pour moi car cela se déclenchera une fois le chargement du panneau de mise à jour terminé, et je ne trouverai aucun moyen côté client de trouver lequel est celui

ScriptManager.GetCurrent(Page).AsyncPostBackSourceElementID AsyncPostBackSourceElementID ne fonctionne pas pour moi car il s'agit d'un objet côté serveur, et je veux côté client

Le framework ClientSide .Net doit savoir quel UpdatePanel il met à jour afin de mettre à jour le contenu correct. Il y a sûrement un moyen de se connecter à cet événement?

Toute aide serait appréciée.

32
James

Vous pouvez accrocher l'événement PageRequestManager.beginRequest et inspecter la propriété BeginRequestEventArgs.postBackElement .

Notez qu'il ne vous donne pas vraiment le UpdatePanel, mais le contrôle à l'intérieur du UpdatePanel. Cela devrait être suffisant, cependant.

Edit: Encore mieux, l'événement PageRequestManager.pageLoaded vous donne PageLoadedEventArgs.panelsUpdated (et panelsCreated ) les propriétés.

13
Mark Brackett

Merci - les deux bonnes réponses. Je suis finalement allé avec le script côté client "pageloaded". C'est une méthode assez enterrée que Google ne m'a pas révélée. Pour ceux qui sont intéressés, ce code fonctionne avec FireBug pour donner une bonne démo de la méthode PageLoaded travaillant pour trouver les panneaux mis à jour:

<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

Cela peut être votre solution.

Dans le code derrière l'événement OnLoad d'UpdatePanel, enregistrez un script de démarrage.

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

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