valor retornar retorna que procedimiento matematicas librerias funciones funcion ejemplos devolver con argumentos javascript asp.net-ajax updatepanel callback

retornar - procedimiento javascript



¿Cómo se ejecuta una devolución de llamada de javascript después de una devolución de datos del panel de actualización? (5)

Estoy usando un complemento de jQuery tip para mostrar sugerencias de ayuda cuando el usuario pasa por alto ciertos elementos de la página.

Necesito registrar los eventos del complemento después de que la página se cargue usando los selectores css.

El problema es que estoy usando un Panel de actualización de ASP.NET y después de la primera devolución de datos, las sugerencias dejan de funcionar porque el panel de actualización reemplaza el contenido de la página, pero no vuelve a enlazar los eventos de JavaScript.

Necesito una forma de ejecutar una devolución de llamada de javascript después de que el Panel de actualización actualice su contenido, por lo que puedo volver a vincular los eventos de javascript para que las sugerencias vuelvan a funcionar.

¿Hay alguna manera de hacer esto?


El pageLoad no funcionó. Usé esto en su lugar:

var prm = Sys.WebForms.PageRequestManager.getInstance(); prm.add_pageLoaded(pageLoaded); function pageLoaded() { }


Probablemente esta sea una de las soluciones más elegantes, pero es una solución, no obstante:

public class UpdatePanel : System.Web.UI.UpdatePanel { /// <summary> /// Javascript to be run when the updatepanel has completed updating /// </summary> [Description("Javascript to be run when the updatepanel has completed updating"), Category("Values"), DefaultValue(null), Browsable(true)] public string OnUpdateCompleteClientScript { get { return (string)ViewState["OnUpdateCompleteClientScript"]; } set { ViewState["OnUpdateCompleteClientScript"] = value; } } protected override void OnPreRender(System.EventArgs e) { base.OnPreRender(e); if(!string.IsNullOrEmpty(this.OnUpdateCompleteClientScript)) Page.ClientScript.RegisterStartupScript(this.GetType(), this.ClientID, string.Concat("Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(sender, args){for(var panelId in sender._updatePanelClientIDs){if(sender._updatePanelClientIDs[panelId] == ''", this.ClientID, "''){", this.OnUpdateCompleteClientScript, "}}});"), true); } }

Úselo así:

<uc:UpdatePanel OnUpdateCompleteClientScript="alert(''update complete'');"> <!-- stuff in here --> </uc:UpdatePanel>

Por supuesto, tendrá que registrar el control personalizado en su webconfig o página para usarlo así.

Editar: también, ¿has mirado jquery.live?


Si desea realizar operaciones específicas antes y después de la carga de UpdatePanel, puede anular BeginPostbackRequest y EndPostbackRequest manera:

var postbackControl = null; var updatePanels = null; var prm = Sys.WebForms.PageRequestManager.getInstance(); prm.add_beginRequest(BeginPostbackRequest); prm.add_endRequest(EndPostbackRequest); function BeginPostbackRequest(sender, args) { prm._scrollPosition = null; postbackControl = args.get_postBackElement(); postbackControl.disabled = true; updatePanels = args._updatePanelsToUpdate; // do your stuff } function EndPostbackRequest(sender, args) { // do your stuff postbackControl.disabled = false; postbackControl = null; updatePanels = null; }

Esto es muy útil si solo desea procesar HTML entregado por el panel de actualización. Algunas operaciones requieren más recursos y sería excesivo procesar todo el árbol DOM en pageLoad .


Use el evento pageLoaded y compruebe si la devolución de llamada o la devolución de datos:

var prm = Sys.WebForms.PageRequestManager.getInstance(); prm.add_pageLoaded(function (sender, args) { if (args._panelsUpdated && args._panelsUpdated.length > 0) { //callback; } else { //postback; } });


En lugar de poner su código jQuery dentro de $(document).ready() , póngalo dentro

function pageLoad(sender, args) { ... }

pageLoad se ejecuta después de cada devolución de datos, síncrono o asíncrono. pageLoad es un nombre de función reservada en ASP.NET AJAX que es para este propósito. $(document).ready() por otro lado, se ejecuta solo una vez, cuando el DOM está inicialmente listo / cargado.

Consulte esta descripción general de los eventos del ciclo de vida del cliente ASP.NET AJAX