2010-03-30 9 views

Respuesta

79

Puede usar la propiedad Triggers de UpdatePanel para registrar las acciones que activan una devolución de datos completa.

Agregue un objeto PostBackTrigger a esa propiedad, que contiene el ControlID del control que necesita desencadenar una devolución de datos completa.

<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server"> 
    <ContentTemplate> 
     ... 
    </ContentTemplate> 
    <Triggers> 
     <asp:PostBackTrigger ControlID="myFullPostBackControlID" /> 
    </Triggers> 
</asp:UpdatePanel> 
+0

Tengo una UltraWebGrid de Infragistics con una columna que consta de botones. Tuve un problema en el que al hacer clic en los botones, se activaban los controladores de eventos, lo que a su vez actualizaba la cuadrícula, pero la cuadrícula no se actualizaba realmente hasta el segundo clic. Poner los botones en un UpdatePanel y agregar estos disparadores resolvió el problema. – tsilb

12

De here:

utilizar el mando a PostBackTrigger para permitir controles dentro de un UpdatePanel para provocar una devolución de datos en lugar de realizar una devolución de datos asincrónica.

<Triggers> 
    <asp:PostBackTrigger ControlID="controlID" /> 
</Triggers> 
+1

+1 - Demasiado rápido @Aseem! – dugas

+0

Hmm, sí, pero no funcionará si dentro de ese UpdatePanel tiene un GridView con números de página, por ejemplo. Cambie a una página nueva y los desencadenantes ya no funcionan. – Fandango68

42

Solo agregue esto porque nadie más lo ha hecho. Es posible hacer esto en código subyacente en una línea de código sin ninguno de los métodos anteriores. Sólo hay que poner esto en Page_Load:

Visual Basic

ScriptManager.GetCurrent(Me).RegisterPostBackControl(myButtonID) 

C#

ScriptManager.GetCurrent(this).RegisterPostBackControl(myButtonID); 
+0

Muy agradable, después de horas de búsqueda, finalmente una solución que funciona. El problema era que todos mis controles (panel de actualización y botón) se estaban creando en el código subyacente, por lo que no se pudo configurar un postbacktrigger. ¡Gracias! – OverMars

+2

Deberías poder.Cuando se crea el control, puede usar AddHandler para crear el desencadenador en su Subrutina que responde – EvilDr

+0

Absolutamente correcto, es tan simple y estoy casi avergonzado de que nunca se me haya ocurrido. Muy bueno, sin embargo .. – OverMars

0

que tenía el mismo problema utilizando un ImageButton dentro de un WebDataGrid.

Puse la línea de EvilDr dentro del preRender para webdatagrid en su lugar. Funcionó muy bien!

for (int i = 0; i < wdgMyData.Rows.Count; i++) 
{ 
    ScriptManager.GetCurrent(this).RegisterPostBackControl((ImageButton)wdgMyData.Rows[i].Items[3].FindControl("btnDownloadExcel")); 
} 
0

Su una vieja cuestión no es el enfoque poco complicado, así, cuando todo está en paneles de actualización y usted quiere hacer pleno segundo palo para que su código document.ready funciona al hacer clic.

1. Crear un botón simulado fuera del panel de actualización y haga clic en él desde el código detrás de esta manera

ScriptManager.RegisterStartupScript(Page, this.GetType(), "ResetDoc", "ResetDocumentReady();", true); 

2. definir la función en parte delantera como esto

function ResetDocumentReady() { 
     $("[id$=DummyButton]").click(); 
    } 

NOTA: Pero la mejor forma es usar el disparador, la respuesta publicada por @Thibault Falise :)

Cuestiones relacionadas