我遇到了一个似乎很常见的问题:我的UpdatePanel触发了完整的PostBack而不是异步PostBack。通常的解决方案是为你动态添加的所有控件分配一个ID,我已经做到了,但我仍然得到了完整的PostBack而不是我的异步PostBack...
以下是代码:
HTML:
有趣的部分是 C# 代码(方法 PlayerItems_ItemDataBound)的后面,如下所示:
以下是代码:
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代码上下移动,也没有帮助。
先提前感谢您..! Lars