Updatepanel дает полный постбэк вместо asyncpostback - PullRequest
8 голосов
/ 01 декабря 2010

Я столкнулся с очень известной проблемой: моя панель обновлений запускает полную обратную передачу вместо асинхронной обратной передачи. Обычное решение - дать всем элементам управления, которые вы добавляете динамически, идентификатор, что я и сделал, но я все равно получаю полную обратную передачу вместо моей асинхронной обратной передачи ...

Вот код:

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

Ответы [ 2 ]

30 голосов
/ 19 декабря 2010

У меня был такой же опыт при заполнении CheckBoxList внутри ListView внутри Panel в UpdatePanel. Это было решено добавлением этого кода в CheckBoxList:

ClientIDMode="AutoID" 
8 голосов
/ 01 декабря 2010

Из документации AsyncPostBackTrigger :

Программное добавление элементов управления AsyncPostBackTrigger не поддерживается. Чтобы программно зарегистрировать элемент управления обратной передачей, используйте RegisterAsyncPostBackControl метод элемента управления ScriptManager .Затем вызовите метод Update элемента управления UpdatePanel , когда элемент управления вернется назад.

...