2011-05-17 26 views
8

Tengo una página aspx que está compuesta por 3 controles de usuario (ascx). Tengo un panel de actualización envolver los controles de usuario 3 así:Ejecutar javascript desde el panel de actualización en cada actualización

<asp:UpdatePanel ID="UpdatePanelWrapper" runat="server"> 
    <ContentTemplate> 
     <uc1:UserControl1 ID="UserControl1" runat="server" />   
     <uc2:UserControl2 ID="UserControl2" runat="server"/> 
     <uc2:UserControl3 ID="UserControl3" runat="server"/> 
    </ContentTemplate> 
</asp:UpdatePanel> 

que muestran cada control de usuario por separado, por lo que cuando se visualice "UserControl1", los otros controles de usuario 2 están ocultos.

Dentro de "UserControl1" Tengo algunos controles asp y algunas funciones de javascript. Mi problema es que estas funciones javascript nunca se llaman cuando se actualiza "UpdatePanelWrapper".

He intentado con esta solución http://blog.dreamlabsolutions.com/post/2009/02/24/jQuery-document-ready-and-ASP-NET-Ajax-asynchronous-postback.aspx, agregando esa llamada javascript dentro del "UserControl1", aunque no está funcionando. Lo hice funcionar solo si agrego esa llamada javascript en la página aspx, pero no dentro de "UserControl1".

Cualquier ayuda sería apreciada, gracias.

Respuesta

11

aquí es cómo se puede hacer esto ....

<script type="text/javascript"> 

     Sys.Application.add_init(appl_init); 

     function appl_init() { 
      var pgRegMgr = Sys.WebForms.PageRequestManager.getInstance(); 
      pgRegMgr.add_endRequest(EndHandler); 
     } 

     function EndHandler() { 
     // This will be called whenever your updatepanel update 
     // It will be trigger after the update updatepanel 
     //add your javascript here 
     }               
    </script> 
+0

Gracias, esta es la forma en que trabajó para mí. Como uso varias UC dentro de la misma página, acabo de agregar ese código en el archivo .aspx, así que puedo llamar a cualquier método js desde el método "EndHandler". – Fer

+0

¡Gran solución, Muhammad! La única mejora que sugeriría sería tener un evento de fuego personalizado en su lugar. De esta forma, se pueden crear y utilizar múltiples controladores sin cambiar el script "base", volver a ejecutar la misma suscripción como en la "base" o sobrescribir el 'EndHandler'. –

0

Idealmente, todos sus JavaScript deberían estar en la parte inferior de la página justo antes de la etiqueta de cierre </body>.

Si está utilizando jQuery, que tendría que utilizar live() o delegate() para asegurarse de que los controladores de eventos de burbujas, incluso cuando la página se actualiza.

1

puede utilizar

Sys.Application.add_load (WireEvents); // cableado solución para .NET AJAX UpdatePanel

como

<script language="javascript" type="text/javascript"> 
// <![CDATA[ 
    Sys.Application.add_load(WireEvents); // fix wiring for .NET ajax updatepanel 
    $(WireEvents); // handle page load wiring using jquery. This will fire on page load 


    function WireEvents() { 
       //do stuff here 
    }; 
// ]]> 
</script> 

Ah, y una cosa más. ten cuidado con los nombres de funciton. de lo contrario, será un desastre. intentar algo como esto

<script language="javascript" type="text/javascript"> 
// <![CDATA[ 
    Sys.Application.add_load(WireEvents_<%=this.ID%>); // fix wiring for .NET ajax updatepanel 
    $(WireEvents_<%=this.ID%>); // handle page load wiring 


    function WireEvents_<%=this.ID%>() { 

    };// end WireEvents_ 


// ]]> 
</script> 

así que básicamente añadiendo _<%=this.ID%> al nombre Funciton asegura que cada instancia del control está llamando a su propia función. suponiendo que puede tener varias instancias del control. Si no es así, al menos, se evita la confusión cuando se llama a wireevents para diferentes controles

1

secuencias de comandos que son devueltos en respuesta UpdatePanel no se evalúan. Si lo entiendo correctamente, le gustaría realizar algunas operaciones de script que se devuelven en la vista UpdatePanel.

Si sí he respondido a esta pregunta aquí:

asp.net eval script in ajax html reponse

Cuestiones relacionadas