2010-11-30 2 views
8

매우 유명한 문제인 것처럼 보였습니다. 내 updatepanel은 비동기 포스트 백 대신 전체 포스트 백을 실행합니다.UpdatePanel은 asyncpostback 대신 전체 포스트 백을 제공합니다.

HTML :

일반적인 솔루션은 다음

코드의 ... 동적 내가 수행 한 ID를 추가,하지만 난 여전히 대신 내 비동기 포스트 백의 전체 포스트 백을받을 모든 컨트롤을 제공하는 것입니다 내가 실제로 AsyncPostBackTr를 추가, 그래서

  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); 

:

<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)이며, 메뉴에 나타나면 ItemCommand 이벤트를 등록해야합니다. 이 컨텍스트 메뉴에서 항목을 클릭하면 어떤 일이 일어나는지, 전체 포스트 백이 발생합니다.

저는 ChildrenAsTriggers 속성을 사용하지 않고도 놀려고했습니다. 또한 AsyncPostBackTrigger 코드를 위아래로 움직였습니다.

미리 감사드립니다. 라스 AsyncPostBackTrigger 문서에서

답변

8

:

프로그래밍 추가 AsyncPostBackTrigger 컨트롤하지 지원됩니다. 프로그래밍 방식으로 포스트 백 컨트롤을 등록하려면 RegisterAsyncPostBackControl 메서드를 ScriptManager 컨트롤로 사용하십시오. 그런 다음 컨트롤이 다시 게시 될 때 UpdatePanel 컨트롤의 Update 메서드를 호출하십시오.

+0

Urh .. 내가 원하는 것은 아닙니다.하지만 그 방법은 끝났습니다! 감사합니다. 정말 고마워! :-) –

+0

훌륭한 정보! =) –

+0

대단히 고맙습니다. UpdatePanel1.Update(); – GPMorgan

29

UpdatePanel의 Panel 내 ListView 내에 CheckBoxList를 채우는 것과 같은 경험이있었습니다. CheckBoxList에 다음 코드를 추가하여 해결되었습니다.

ClientIDMode="AutoID" 
+5

이 작품! 정말 고맙습니다. MS는 ClientID가 .net 4.0에서 "AutoID"에서 "Predictable"로 생성되는 방법을 바 꾸었습니다. ScriptManager 또는 UpdatePanel이이를 올바르게 사용하도록 업데이트되지 않았을 것입니다. 왜 그것이 어디에 있는지 또는 그것이 의도적으로 그런 식으로 남겨 졌는지에 대한 문서를 찾을 수 없습니다. – MikeTeeVee

+2

대단한 답변 !!! 감사 !! – billy

+3

Epic Answer, 너무 쉽습니다. 고맙습니다! –

관련 문제