我有一个DataList,它绑定了一组People,每个Person都有一个Button,点击它时需要导致异步回发,所以OnClick事件处理程序可以更改UpdatePanel中显示的细节[DataList在外面的UpdatePanel]。
我已经两次尝试将Button设置为更改DataList的OnItemDataBound事件处理程序中的UpdatePanel。一个将AsyncPostBackTrigger分配给UpdatePanel,另一个分配给RegisterAsyncPostBackControl到ScriptManager。两者都有效但只是第一次。如果按下另一个人的按钮[或第二次按下相同的按钮],页面将完全回发。
UpdatePanel的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?我必须在尝试这种方式时遗漏一些东西。
答案 0 :(得分:3)
我想出了一个解决方案,虽然我不确定它是最好/最优的。在Page_Load方法中的每个PostBack上,我遍历项目并将Aync PostBack注册到按钮:
if ( IsPostBack )
{
foreach ( DataListItem item in gvAllUsers.Items )
{
btnShowNotes = item.FindControl( "btnShowNotes" ) as ImageButton;
ScriptManager1.RegisterAsyncPostBackControl( btnShowNotes );
}
}
答案 1 :(得分:0)
ToolkitScriptManager1.RegisterAsyncPostBackControl(ibtnShowPicker) 你必须把上面的代码放在page_load上 ibtnShowPicker是id名称