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

Lar*_*ard 8 c# asp.net ajax postback updatepanel

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

这是代码:

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>
Run Code Online (Sandbox Code Playgroud)

有趣的部分是后面的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);
Run Code Online (Sandbox Code Playgroud)

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

我一直试图在没有帮助的情况下玩ChildrenAsTriggers.我也一直在上下移动AsyncPostBackTrigger代码,也没有帮助.

非常感谢事先..!拉尔斯

小智 30

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

ClientIDMode="AutoID" 
Run Code Online (Sandbox Code Playgroud)

  • 这有效!非常感谢.MS将.net 4.0中生成ClientID的方式从"AutoID"更改为"Predictable",我猜测ScriptManager或UpdatePanel未正确更新以使用它.我无法找到有关为什么会出现这种情况的文档,或者它是否被设计保留. (5认同)
  • 史诗般的答案,如此简单.谢谢! (3认同)
  • 我讨厌这是解决方案,但它有效!谢谢! (2认同)

Fré*_*idi 8

AsyncPostBackTrigger文档:

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