Comment contrôler quel JavaScript est exécuté après UpdatePanel postback final endRequest?

Je sais que je peux m'engager dans les événements côté client pour exécuter JavaScript après chaque retour partiel; Cependant, je veux faire quelque chose comme ça:

protected void FooClicked(object sender, EventArgs e) { ClientScript.RegisterStartupScript(GetType(), "msg", "showMsg('Foo clicked');",true); } 

Je sais que je pourrais le pirater complètement avec des champs cachés et exécuter quelque chose après chaque postback, mais il devrait y avoir un moyen assez direct de manière similaire à cela.

L'exemple de code spécifique que vous décrivez ne fonctionne pas avec les post-backs partiels, puisque ClientScript.RegisterStartupScript() écrit JS sur la page pendant la phase de construction de sortie du cycle de vie de la demande; Alors qu'un postback partiel ne met en branle une partie sélectionnée de la page via JavaScript (même si le balisage pour la page entière, y compris votre script de démarrage, est généré sur le serveur).

Pour imiter de près ce que vous décrivez, vous devez inclure un contrôle littéral à l'intérieur de votre UpdatePanel et, pendant le décomptage partiel, définir la propriété Text du panneau de contenu dans le script que vous souhaitez exécuter:

 myLiteral.Text = "<script type=\"JavaScript\">doStuff();</script>"; 

IMO, une façon plus appropriée est d'utiliser l' API côté client pour les post-retournements asynchrones pour enregistrer un gestionnaire d'événements à exécuter lorsque le postback est terminé:

 function endRequestHandler(sender, args) { doStuff(); } Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler); 

Si vous devez transmettre les informations qui ont été générées pendant le retour dans le gestionnaire, vous pouvez passer cela via des champs cachés et récupérer cela à partir du DOM dans votre gestionnaire côté client.

C'est beaucoup plus élégant, l'OMI. Apparemment ASP AJAX appellera toute fonction JS nommée pageLoad. Alors, écrivez une fonction appelée pageLoad et elle sera exécutée sur chaque chargement de page, même après une mise à jour partielle.

 <script type="text/javascript" language="javascript"> function ValidateUserRole() { var answer = confirm("Are you sure..................") if (answer) { var btnRoleReleatedButton = '<%=btnRoleReleatedButton.ClientID%>'; document.getElementById(btnRoleReleatedButton).click(); } else { return false; } } </script> 

 Tier 3 :<asp:UpdatePanel ID="upTier3Details" runat="server" UpdateMode="Conditional"> <ContentTemplate> <asp:DropDownList ID="ddlTier3" runat="server" CssClass="ddlextralarge" Width="350" /> </ContentTemplate> <Triggers> <asp:AsyncPostBackTrigger ControlID="ddlUserRole" EventName="SelectedIndexChanged" /> </Triggers> </asp:UpdatePanel> 

La meilleure façon de le faire est d'utiliser le contrôle DoAfterPostBack. Vous pouvez télécharger gratuitement ce contrôle ici http://go2amitech.blogspot.com/2010/08/running-specific-javascript-after.html