2010-11-30 10 views
8

se han topado con lo que parece ser un problema muy famoso: Mi UpdatePanel dispara una devolución de datos completa en lugar de una devolución de datos asincrónica. La solución normal es dar a todos los controles se agrega dinámicamente un documento de identidad, lo que he hecho, pero aún así obtener una devolución de datos completa en lugar de mi devolución de datos asincrónica ...UpdatePanel da plena devolución de datos en lugar de asyncpostback

Aquí está el código:

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> 

la parte interesante es el código C# detrás (PlayerItems_ItemDataBound método), que es como la siguiente:

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

Así que, en realidad agrego una AsyncPostBackTr igger al menú, por lo que el evento ItemCommand debe registrarse. Lo que ocurre cuando hago clic en un elemento en este menú contextual, es una transacción completa.

he estado tratando de jugar con la propiedad ChildrenAsTriggers sin ayuda. También he estado moviendo el código AsyncPostBackTrigger hacia arriba y hacia abajo, también sin ayuda.

Muchas gracias de antemano ..! Lars

Respuesta

8

De la documentación AsyncPostBackTrigger:

programación añadiendo controles AsyncPostBackTrigger no es compatible. Para programar registrar un control de devolución de datos, utilice el RegisterAsyncPostBackControl método de el control ScriptManager. A continuación, llame el método del control UpdatePanel Update cuando los puestos de control posterior.

+0

Urh ... No era lo que esperaba ... ¡Pero así es como se hace! ¡Muchas gracias! ¡Estoy realmente agradecido! :-) –

+0

¡Gran información! =) –

+0

¡Muchas gracias por esto, pateándome! UpdatePanel1.Update(); – GPMorgan

29

Tuve la misma experiencia al rellenar un CheckBoxList dentro de un ListView dentro de un Panel en un UpdatePanel. Se resolvió agregando este código en CheckBoxList:

ClientIDMode="AutoID" 
+5

Esto funciona! Muchas gracias. MS cambió la forma de ClientID se generan en .net 4.0 de "AutoID" a "predecible" y supongo que los scriptmanager o UpdatePanel de que no se actualizan correctamente para usarlo. No puedo encontrar documentación sobre por qué está en cualquier parte o si se dejó así por diseño. – MikeTeeVee

+2

¡¡¡GRAN RESPUESTA !!! Gracias !! – billy

+3

Epic Answer, tan fácil. ¡Gracias! –

Cuestiones relacionadas