2010-09-25 16 views
5

Tengo una lista de datos que tiene una colección de personas vinculadas a ella, con cada persona que tiene un botón que al hacer clic necesita una devolución de datos asincrónica para que el controlador de eventos OnClick pueda cambiar los detalles mostrados en un panel de actualización [la lista de datos está fuera de el UpdatePanel].Cómo activar siempre un PostBack asincrónico para un Panel de actualización desde un botón en una Lista de datos?

He intentado dos veces configurar el Botón para cambiar el Panel de actualización en el controlador de eventos OnItemDataBound del DataList. Uno asigna AsyncPostBackTrigger al UpdatePanel y el otro a RegisterAsyncPostBackControl al ScriptManager. Ambos funcionan pero solo la primera vez. Si se presiona el botón de otra persona [o el mismo botón por segunda vez], la página se publica por completo.

UpdatePanel's UpdateMode está establecido en Conditional y ScriptManager tiene EnablePartialRenderingEnablePartialRendering establecido en true.

en el Código OnItemDataBound:

Button btnShowNotes = e.Item.FindControl("btnShowNotes") as Button; 

// Trigger 
AsyncPostBackTrigger trigger = new AsyncPostBackTrigger(); 
trigger.ControlID = btnShowNotes.UniqueID; 
trigger.EventName = "Click"; 
upDetails.Triggers.Add(trigger); // UpdatePanel 

// The trigger or this is used, not both 
ScriptManager1.RegisterAsyncPostBackControl(btnShowNotes); 

vez que el primer asíncrono PostBack ha sucedido parece perder la referencia, pero sin duda esto se puede conservar sin tener que volver a enlazar constantemente DataList? Debo extrañar algo en la forma en que estoy intentando esto.

+0

Buscar respuestas en un fin de semana probablemente no sea demasiado exitoso, pero molesto [típicamente] Necesito que esto se resuelva antes del lunes, ya que las nuevas funciones deben activarse el lunes, ¡y esto es lo único que impide que se complete! – Rich

Respuesta

3

Se me ocurrió una solución, aunque no estoy seguro de que sea la mejor/la más óptima. En cada devolución de datos en el método Page_Load, que recorrer los elementos y registrar el Aync PostBack a los botones:

if (IsPostBack) 
{ 
    foreach (DataListItem item in gvAllUsers.Items) 
    { 
     btnShowNotes = item.FindControl("btnShowNotes") as ImageButton; 
     ScriptManager1.RegisterAsyncPostBackControl(btnShowNotes); 
    } 
} 
+0

Si alguien puede encontrar una mejor manera, los marcaré como la respuesta. La mía no puede ser para las próximas 11 horas de todos modos. – Rich

0

ToolkitScriptManager1.RegisterAsyncPostBackControl (ibtnShowPicker) tienes que poner por encima de código de Page_Load ibtnShowPicker es el nombre Identificación del

Cuestiones relacionadas