一尘不染

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

ajax

我遇到了一个似乎很著名的问题:我的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代码。

非常感谢。拉尔斯


阅读 170

收藏
2020-07-26

共1个答案

一尘不染

AsyncPostBackTrigger文档中:

不支持以编程方式添加AsyncPostBackTrigger控件。
若要以编程方式注册回发控件,请使用ScriptManager控件的
RegisterAsyncPostBackControl方法。然后,
当控件回发时,调用UpdatePanel控件的Update方法。

2020-07-26