2009-03-05 3 views
2

J'ai un contrôle personnalisé assez complexe - le contrôle personnalisé a un couple de panneaux de mise à jour.Pourquoi le panneau de mise à jour effectue-t-il une publication complète pour le contrôle personnalisé?

Je suis en train d'utiliser le contrôle comme celui-ci à l'intérieur d'un panneau de mise à jour:

<asp:UpdatePanel ID="up1" runat="server"> 
    <ContentTemplate> 
    <asp:Button ID="btn1" runat="server" Text="Sample Button" />&nbsp;&nbsp;<asp:Label ID="lblTime" runat="server"></asp:Label>  
    <cc1:MyCustomControl ID="MyCustomControl1" runat="server" > 
    </cc1:MyCustomControl> 
    </ContentTemplate> 
</asp:UpdatePanel> 

Lorsque je clique sur le bouton dans le panneau de mise à jour, il fait un poste de async en arrière et il n'y a pas d'écran « scintillement » Lorsque je clique sur un bouton dans mon contrôle personnalisé, la page scintille et renvoie un message complet.

A l'intérieur du contrôle personnalisé, il y a des panneaux de mise à jour qui essaient de faire postbacks plein (en fonction des déclencheurs).

Comment puis-je faire le niveau de la page UpdatePanel pas faire une publication complète, peu importe ce qui se passe à l'intérieur du contrôle personnalisé?

+0

Pouvez-vous afficher le code source du contrôle personnalisé? –

Répondre

-3

Sur l'UpdatePanel, définissez la propriété ChildrenAsTriggers="true". Cela indique au UpdatePanel d'intercepter toutes les invocations PostBack qui proviennent de l'UpdatePanel.

Vous pouvez explorer aussi le UpdateMode property, qui détermine quels types d'événements déclenchent une mise à jour. (Par défaut, un UpdatePanel se rafraîchira si un autre panneau de l'écran est rafraîchi, ce qui m'a jeté un moment jusqu'à ce que je réalise ce qui se passait.)

+0

Cela n'a pas fonctionné, il n'a d'impact que sur les "contrôles enfants immédiats" selon les documents MSDN. Je pense que le problème est avec les contrôles qui sont imbriqués dans le contrôle personnalisé provoquant une publication. – brendan

0

Je regarderais d'abord s'il y a un autre problème avec le contrôle personnalisé provoquant la publication de la page entière, comme dans tous les cas ce qui devrait se produire est que tout le panneau de mise à jour se rafraîchit (toujours avec ajax).

Après cela, il suffit de regarder la section Nesting UpdatePanel Contrôle de ceci: http://msdn.microsoft.com/en-us/library/bb398867.aspx#

Assurez-vous également d'avoir le contrôle ScriptManager avec la propriété EnablePartialRendering définie sur true.

2

Avez-vous pensé à établir explicitement un aspic: AsyncPostBackTrigger avec le contrôle btn1 dans le contrôle UP1 UpdatePanel.

<asp:UpdatePanel ID="up1" runat="server"> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="btn1" EventName="Click" /> 
    </Triggers> 
    <ContentTemplate>  
     <asp:Button ID="btn1" runat="server" Text="Sample Button" /> 
     <asp:Label ID="lblTime" runat="server"></asp:Label>   
     <cc1:MyCustomControl ID="MyCustomControl1" runat="server" />     
    </ContentTemplate> 
</asp:UpdatePanel> 

Edit: Comment vous avez essayé d'appeler explicitement la méthode de mise à jour dans l'événement OnClick du bouton du panneau de mise à jour? Cela inclut les panneaux de mise à jour intégrés dans le contrôle personnalisé.

+0

btn1 n'est pas le problème - il fonctionne comme je m'attendrais à faire un post-retour "scintillement moins". C'est lorsque l'événement CustomControl déclenche qu'un retour complet se produit. – brendan

+0

Le contrôle personnalisé doit-il être intégré au panneau de mise à jour up1? Pouvez-vous le déplacer ailleurs dans la page? –

+0

Non, il doit être dans le UP. Les post-retours, les incendies doivent être gérés async. Dans mon exemple actuel, il n'y a pas de bouton, juste le contrôle personnalisé dans le HAUT.J'ai mis le bouton pour démontrer que l'UP peut gérer les choses asynchrones standard. – brendan

Questions connexes