2010-09-25 13 views
5

Ho una DataList che ha una collezione di persone ad essa associate, con ogni persona che ha un pulsante che quando viene cliccato deve causare un postback asincrono in modo che il gestore di eventi OnClick possa modificare i dettagli mostrati in un UpdatePanel [la DataList è esterna l'UpdatePanel].Come attivare sempre un Postback asincrono per un UpdatePanel da un pulsante in una DataList?

Ho effettuato due tentativi per impostare il pulsante per modificare UpdatePanel nel gestore eventi OnItemDataBound del DataList. Uno assegna un AsyncPostBackTrigger a UpdatePanel e l'altro a RegisterAsyncPostBackControl per ScriptManager. Entrambi funzionano ma solo la prima volta. Se viene premuto il pulsante di un'altra persona [o lo stesso pulsante per una seconda volta], la pagina viene completamente ripristinata.

UpdatePanel's UpdateMode è impostato su Conditional e ScriptManager ha EnablePartialRenderingEnablePartialRendering impostato su true.

codice nel 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); 

Una volta che la prima Async postback è accaduto sembra perdere il riferimento, ma sicuramente questo può essere persisteva senza dover associare nuovamente costantemente il DataList? Devo mancare qualcosa nel modo in cui sto provando questo.

+0

Cercare risposte per un fine settimana probabilmente non avrà molto successo, ma in genere mi preoccupo di risolverlo prima di lunedì, dato che le nuove funzionalità devono essere pubblicate lunedì, e questa è l'unica cosa che impedisce di essere completato! – Rich

risposta

3

Ho trovato una soluzione anche se non sono sicuro che sia la migliore/la più ottimale. Su ogni PostBack nel metodo Page Load, ho ciclo tra gli elementi e registrare l'Aync PostBack ai pulsanti:

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

Se qualcuno riesce a trovare un modo migliore, li contrassegnerò come risposta. Il mio non può essere per le prossime 11 ore lo stesso. – Rich

0

ToolkitScriptManager1.RegisterAsyncPostBackControl (ibtnShowPicker) devi mettere sopra il codice Page_Load ibtnShowPicker è il nome id