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.
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.
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>
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);