2010-09-25 86 views
5

我有一个DataList绑定到它的人的集合,每个人有一个按钮,点击时需要导致异步回发,所以OnClick事件处理程序可以更改UpdatePanel中显示的详细信息[DataList不在UpdatePanel]。如何总是从DataList中的按钮触发UpdatePanel的异步回传?

我做了两次尝试来设置按钮,以更改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控件被持久化?我必须以我尝试这种方式错过某些东西。

+0

寻找答案在周末可能不会太成功,但烦人[通常]我需要的新功能需要去现场周一周一在此之前得到解决,这是没有完成停止它的唯一的事情! – Rich 2010-09-25 22:55:30

回答

3

我想出了一个解决方案,虽然我不确定它是最好的还是最优的。在Page_Load方法每次回发时,我遍历项目,并注册Aync回发到按钮:

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

如果有人能想出一个更好的方法,我会将它们标记为答案。无论如何,我自己无法在接下来的11个小时内完成。 – Rich 2010-09-27 09:06:40

0

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

相关问题