Mientras lo hacía, vas a odiar la respuesta Microsoft prescrito. La respuesta "prescrita" es utilizar el PageRequestManager para configurar un controlador de solicitudes. Este controlador de solicitud se ejecuta (luego) después de que se complete cada devolución parcial.
El controlador de solicitudes Ejemplo:
<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>
Eso nos lleva a la simple respuesta:
Por qué no inicializar el control del usuario explícitamente de código subyacente y mantener que la inicialización de JavaScript dentro de su usuario controla HTML (sí mismo).
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 vez dictada, la lógica "buildInitializer", dice, "Si existe esta función en el cliente ... llamarlo." Y funciona cada vez.
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();
}
Ahora Tu-inicialización de controles de usuario pueden vivir en la facilidad de control donde debe estar:
<script type="text/javascript">
function initializeMyControl() {
// Your normal code goes here
setupSomething();
initializeSomethingElse();
}
</script>
¿Está utilizando UpdatePanels? –
Sí, la página principal contiene una cantidad de paneles de actualización; el panel que contiene este control de usuario también contiene 4 o 5 más. – Dave
Ver http://stackoverflow.com/questions/1152946/how-to-have-a-javascript-callback-executed-after-an-update-panel-postback/1153002#1153002 –