2010-09-25 15 views
5

Mam DataList, który ma kolekcję osób związanych z nim, przy czym każda osoba ma przycisk, który po kliknięciu musi wywoływać asynchroniczny odświeżenie, więc program obsługi zdarzeń OnClick może zmieniać szczegóły wyświetlane w panelu UpdatePanel [DataList jest poza UpdatePanel].Jak zawsze uruchamiać Asynchroniczny PostBack dla UpdatePanel z przycisku w DataList?

Podjąłem dwie próby ustawienia przycisku, aby zmienić UpdatePanel w module obsługi zdarzeń OnItemDataBound DataList. Jeden przypisuje AsyncPostBackTrigger do UpdatePanel, a drugi do RegisterAsyncPostBackControl do ScriptManager. Oba działają, ale tylko za pierwszym razem. Jeśli zostanie naciśnięty inny przycisk osoby [lub ten sam przycisk po raz drugi], strona zostanie w całości wysłana z powrotem.

Tryb UpdatePanel jest ustawiony na Conditional, a ScriptManager ma wartość EnablePartialRenderingEnablePartialRendering na wartość true.

kod w 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); 

raz pierwszy asynchroniczny odświeżenie działo się to wydaje się tracić odniesienia, ale na pewno można to trwało bez konieczności nieustannego ponownie powiązać DataList? Muszę czegoś przegapić w taki sposób, w jaki próbuję to zrobić.

+0

Szukanie odpowiedzi na weekend prawdopodobnie nie będzie zbyt udane, ale denerwujące [zazwyczaj] Potrzebuję tego rozwiązania przed poniedziałkiem, ponieważ nowe funkcje muszą zostać opublikowane w poniedziałek, a to jedyna rzecz, która powstrzymuje je przed ukończeniem! – Rich

Odpowiedz

3

Wpadłem na rozwiązanie, choć nie jestem pewien, czy jest najlepszy/najbardziej optymalny. Na każdym odświeżenie strony w metodzie Page_Load, I pętli elementów i zarejestrować Aync PostBack do przycisków:

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

Jeśli ktoś może wymyślić lepszy sposób, zaznaczę je jako odpowiedź. Moje i tak nie może być przez następne 11 godzin. – Rich

0

ToolkitScriptManager1.RegisterAsyncPostBackControl (ibtnShowPicker) trzeba umieścić powyższy kod page_load ibtnShowPicker to nazwa id