2009-07-23 5 views
7

Même en essayant de trouver une réponse à ce problème, je n'ai trouvé aucune explication claire (en particulier on ne discuter GridViews) sur la façon de résoudre l'erreur suivante je reçois lors de l'exécution d'un programme avec un UpdatePanel:Implémentation de l'interface INamingContainer pour UpdatePanel?

Message: Control with ID 'lblDisplay' being registered through RegisterAsyncPostBackControl or RegisterPostBackControl must implement either INamingContainer, IPostBackDataHandler, or IPostBackEventHandler. 

le UpdatePanel est:

<form id="form1" runat="server"> 
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"></asp:ScriptManager> 
<asp:UpdatePanel ID="up1" UpdateMode="Conditional" runat="server"> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="lblDisplay" eventname="Load" /> 
    </Triggers> 
    <ContentTemplate> 
     <asp:HiddenField ID="hiddenZone" runat="server" /> 
     <asp:HiddenField ID="hiddenZone2" runat="server" /> 
     <div style='width: 150px;position:absolute; margin-left: 0;text-align:center;'> 
     <span id="clock" style='font-size:125%;'></span> 
     <asp:Label ID="lblDisplay" runat="server" Text=""></asp:Label></div>    
     <div style='width:150px;position:absolute;margin-left:150px;text-align:center;text-transform:capitalize;'> 
     <asp:Label ID="lblDisplay2" runat="server" Text="" Interval="5000" ontick="tick"></asp:Label> 
     </div> 
    </ContentTemplate> 
</asp:UpdatePanel> 
</form> 

de ma compréhension, je dois implémenter l'interface INamingContainer pour lblDisplay, mais ne suis pas tout à fait sûr sur la façon d'y parvenir. Dois-je renseigner les informations UpdatePanel? Créer un nouvel objet pour INamingContainer?

Répondre

9

Le problème est que Label ne déclenche pas un événement de publication - ce n'est pas interactif. Pour que quelque chose soit enregistré en tant que PostBackTrigger, il doit en quelque sorte déclencher une commande Postback - généralement en réponse à une entrée utilisateur - que le UpdatePanel peut ensuite intercepter. ou le contrôle enregistré en tant que déclencheur doit pouvoir contenir contrôles qui déclenchent des événements de publication - par ex. un INamingContainer (par exemple un Panel).

+0

Mon UpdatePanel n'est supposé recevoir aucune entrée utilisateur. La seule action se déroule dans lblDisplay2, avec son événement ontick. Le panneau devrait simplement actualiser après les événements sur le serveur avec de nouvelles informations. Si lblDisplay ne publie rien, quelle est l'alternative pour y parvenir? – LoganFrederick

+0

@Logan le contrôle Label n'a pas d'événement OnTick ... essayez-vous d'utiliser un contrôle Timer? Si oui, ce contrôle devrait être votre PostBackTrigger, pas l'étiquette. Les étiquettes ne déclenchent pas d'événements de publication, c'est-à-dire un événement côté client. Les étiquettes ne sont écrites que depuis le serveur. –

+0

Oui, j'essaie d'utiliser un contrôle Timer, et de comprendre les événements sur le côté serveur en C#, mais je ne comprends pas très bien comment il interagit et est initié sur le côté client dans ASP. Cela conduit probablement à une question distincte de celle d'origine. – LoganFrederick