Как всегда запускать асинхронный PostBack для UpdatePanel из Button в DataList? - PullRequest
5 голосов
/ 26 сентября 2010

У меня есть DataList, к которому привязан набор людей, при этом у каждого человека есть кнопка, которая при нажатии должна вызывать асинхронную обратную передачу, чтобы обработчик события OnClick мог изменять детали, отображаемые в UpdatePanel [DataList находится вне панели обновления].

Я сделал две попытки установить Button для изменения UpdatePanel в обработчике события OnItemDataBound в DataList. Один назначает AsyncPostBackTrigger для UpdatePanel, а другой - для RegisterAsyncPostBackControl для ScriptManager. Оба работают, но только в первый раз. Если нажата кнопка другого человека [или та же самая кнопка второй раз], страница полностью отправляется обратно.

UpdateManue UpdateMode имеет значение Conditional, а ScriptManager имеет EnablePartialRenderingEnablePartialRendering, установленный в true.

Код в 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 );

Как только произошел первый Async PostBack, похоже, он теряет ссылку, но, безусловно, это можно сохранить без необходимости постоянно перепривязывать DataList? Я, должно быть, что-то упустил, пытаясь это сделать.

Ответы [ 2 ]

3 голосов
/ 27 сентября 2010

Я придумала решение, хотя я не уверена, что оно лучшее / наиболее оптимальное. На каждом PostBack в методе Page_Load я перебираю элементы и регистрирую Aync PostBack для кнопок:

if ( IsPostBack )
{
    foreach ( DataListItem item in gvAllUsers.Items )
    {
        btnShowNotes = item.FindControl( "btnShowNotes" ) as ImageButton;
        ScriptManager1.RegisterAsyncPostBackControl( btnShowNotes );
    }
}
0 голосов
/ 09 мая 2013

ToolkitScriptManager1.RegisterAsyncPostBackControl (ibtnShowPicker), который вы должны поместить выше кода page_load ibtnShowPicker - это имя идентификатора

...