come ho fatto, si sta andando ad odiare la risposta di Microsoft prescritto. La risposta "prescritta" consiste nell'utilizzare PageRequestManager per impostare un gestore richieste. Questo gestore di richieste viene (quindi) eseguito dopo il completamento di ogni postback parziale.
Il gestore richieste Esempio:
<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>
che ci porta alla semplice risposta:
Perché non inizializzare l'utente-controllo in modo esplicito dal code-behind e mantenere che l'inizializzazione JavaScript all'interno il tuo utente controlla HTML (stesso).
void YourUserControl_PreRender(object sender, EventArgs e)
{
try
{
}
catch (Exception ex)
{
}
finally
{
// Do this
ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "registerInitializer", buildInitializer(), true);
}
}
Una volta reso, la logica "buildInitializer" dice, "Se questa funzione presente sul client ... chiamarlo." E ... funziona ogni volta.
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();
}
adesso Il tuo User-controlli di inizializzazione può vivere nel User-Control dove dovrebbe essere:
<script type="text/javascript">
function initializeMyControl() {
// Your normal code goes here
setupSomething();
initializeSomethingElse();
}
</script>
fonte
2011-03-30 11:38:13
Si sta utilizzando UpdatePanels? –
Sì, la pagina principale contiene un numero di pannelli di aggiornamento: il pannello contenente questo controllo utente contiene anche altri 4 o 5. – Dave
Vedere http://stackoverflow.com/questions/1152946/how-to-have-a-javascript-callback-executed-after-an-update-panel-postback/1153002#1153002 –