Как всегда запускать асинхронный PostBack для UpdatePanel из Button в DataList?

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

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

UpdateMode UpdatePanel установлен в Условный, и 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 ответа

Решение

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

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

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

Другие вопросы по тегам