5

我有一个 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 );

一旦第一次异步回发发生,它似乎失去了引用,但肯定可以保持这种状态,而不必不断重新绑定 DataList?我尝试这样做的方式一定是遗漏了一些东西。

4

2 回答 2

3

我想出了一个解决方案,尽管我不确定它是最好的/最优化的。在 Page_Load 方法中的每个 PostBack 上,我遍历项目并将 Aync PostBack 注册到按钮:

if ( IsPostBack )
{
    foreach ( DataListItem item in gvAllUsers.Items )
    {
        btnShowNotes = item.FindControl( "btnShowNotes" ) as ImageButton;
        ScriptManager1.RegisterAsyncPostBackControl( btnShowNotes );
    }
}
于 2010-09-27T09:04:31.660 回答
0

ToolkitScriptManager1.RegisterAsyncPostBackControl(ibtnShowPicker) 你必须把上面的代码 page_load ibtnShowPicker 是 id 名称

于 2013-05-09T10:57:33.720 回答