如何始终从DataList中的按钮触发UpdatePanel的异步PostBack?

时间:2010-09-25 20:08:40

标签: asp.net-ajax asynchronous-postback

我有一个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?我必须在尝试这种方式时遗漏一些东西。

2 个答案:

答案 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名称