Updatepanel提供完整的回发而不是asyncpostback

时间:2010-11-30 22:05:08

标签: c# asp.net ajax updatepanel postback

我遇到了一个非常着名的问题:我的updatepanel会触发一个完整的回发而不是异步回发。正常的解决方案是给你动态添加的所有控件一个ID,我已经完成了,但我仍然得到一个完整的回发而不是我的异步回发......

以下是代码:

HTML:

<asp:UpdatePanel ID="ItemsUpdatePanel" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="False">
   <Triggers>
   </Triggers>    
   <ContentTemplate>
   <asp:ListView ID="PlayerItems" runat="server" GroupItemCount="5" 
                                    onitemdatabound="PlayerItems_ItemDataBound">
   <LayoutTemplate>

   ... Listview stuff ...

    </asp:ListView> 

    </ContentTemplate>
</asp:UpdatePanel>

有趣的部分是后面的C#代码(方法PlayerItems_ItemDataBound),如下所示:

            ImageButton imgBtn = new ImageButton();
            imgBtn.ID = "itemBtn";
            imgBtn.Width = Unit.Pixel(30);
            imgBtn.ImageUrl = "~/Images/Game/Items/" + myItem.ItemImageUrl;

            ContextMenu menu = new ContextMenu();
            menu.BoundControls.Add(imgBtn);
            menu.ItemCommand += new CommandEventHandler(menu_ItemCommand);

            menu.AutoHide = true;
            menu.RolloverColor = Color.Gray;
            menu.ID = "MenuMenu";

            Panel panel = (Panel)(e.Item.FindControl("ItemPanel"));
            panel.Controls.Add(imgBtn);
            panel.Controls.Add(menu);

            AsyncPostBackTrigger trig = new AsyncPostBackTrigger();
            trig.ControlID = menu.UniqueID;
            trig.EventName = "ItemCommand";
            ItemsUpdatePanel.Triggers.Add(trig);

所以,我实际上在菜单中添加了AsyncPostBackTrigger,因此应该注册ItemCommand事件。单击此上下文菜单中的项目时发生的事情是完整的回发事件。

我一直试图在没有帮助的情况下使用ChildrenAsTriggers属性。我也一直在上下移动AsyncPostBackTrigger代码,也没有帮助。

事先非常感谢..! 拉斯

2 个答案:

答案 0 :(得分:29)

我在UpdatePanel中的Panel中填充ListView内的CheckBoxList时有相同的体验。它通过在CheckBoxList中添加此代码来解决:

ClientIDMode="AutoID" 

答案 1 :(得分:8)

来自AsyncPostBackTrigger文档:

  

以编程方式添加   AsyncPostBackTrigger控件不是   支持。以编程方式   注册一个回发控件,使用   RegisterAsyncPostBackControl方法   ScriptManager控件。Update然后打电话   UpdatePanel的{{3}}方法   当控制回发时控制。