我遇到了一个似乎很著名的问题:我的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代码。
非常感谢。拉尔斯
从AsyncPostBackTrigger文档中:
不支持以编程方式添加AsyncPostBackTrigger控件。 若要以编程方式注册回发控件,请使用ScriptManager控件的 RegisterAsyncPostBackControl方法。然后, 当控件回发时,调用UpdatePanel控件的Update方法。