Comme je l'ai fait, vous allez détester la réponse de Microsoft prescrit. La réponse "prescrite" est d'utiliser le PageRequestManager pour installer un gestionnaire de requêtes. Ce gestionnaire de requêtes est (ensuite) exécuté après chaque publication partielle.
Le Gestionnaire de demandes Exemple:
<script id="events" type="text/javascript">
jQuery(document).ready(function() {
// Your normal code goes here
setupSomething();
initializeSomethingElse();
// Setup your partial-postback event handler.
// This is used to rewire all events since all are 'lost' after partial-postback.
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(requestHandler);
});
///<summary>partial postback event handler. Executed after the partial postback is completed. Clears modal popup textboxes</summary>
///<param name="sender"></param>
///<param name="args">http://www.asp.net/ajax/documentation/live/ClientReference/Sys.WebForms/EndRequestEventArgsClass/default.aspx</param>
function requestHandler(sender, args) {
if (args.get_error() == undefined) {
// Your normal code goes here
setupSomething();
initializeSomethingElse();
}
else
alert(args.get_error()); // Do something
}
</script>
Cela nous amène à la simple réponse:
Pourquoi ne pas initialiser votre utilisateur contrôle explicitement à partir de votre code-behind et garder que JavaScript d'initialisation dans les votre utilisateur contrôle HTML (lui-même). Une fois rendue, la logique "buildInitializer" dit: "Si cette fonction existe sur le client ... appelez-la." Et ... ça marche à chaque fois.
private string buildInitializer()
{
StringBuilder javascript = new StringBuilder();
javascript.Append("if (window.initializeMyControl) {");
javascript.Append("if(typeof window.initializeMyControl == 'function') { initializeMyControl(); }");
javascript.Append("}");
return javascript.ToString();
}
maintenant User-Controls Initialisation peut vivre dans l'utilisateur contrôle où il devrait être:
<script type="text/javascript">
function initializeMyControl() {
// Your normal code goes here
setupSomething();
initializeSomethingElse();
}
</script>
Utilisez-vous UpdatePanels? –
Oui, la page principale contient un certain nombre de panneaux de mise à jour - le panneau contenant ce contrôle utilisateur en contient également 4 ou 5 autres. – Dave
Voir http://stackoverflow.com/questions/1152946/how-to-have-a-javascript-callback-executed-after-an-update-panel-postback/1153002#1153002 –