2009-07-23 10 views
7

Anche nel tentativo di trovare una risposta a questo problema, non ho trovato alcuna spiegazione chiara (in particolare uno non discutere GridView) su come risolvere il seguente errore che ricevo quando si esegue un programma con un UpdatePanel:Implementazione dell'interfaccia INamingContainer per UpdatePanel?

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

L'UpdatePanel è:

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

Dalla mia comprensione, devo implementare l'interfaccia INamingContainer per lblDisplay, ma non sono del tutto sicuro su come raggiungere questo obiettivo. Devo catalogare le informazioni di UpdatePanel? Crea un nuovo oggetto per INamingContainer?

risposta

9

Il problema è che Label non attiva un evento di postback - non è interattivo. Affinché qualcosa venga registrato come PostBackTrigger, deve in qualche modo attivare un comando Postback, solitamente in risposta a un input dell'utente, che l'UpdatePanel può quindi intercettare. Oppure il controllo registrato come trigger deve essere in grado di contenere controlli che attivano gli eventi di postback - ad es. un INamingContainer (ad esempio un Panel).

+0

My UpdatePanel non dovrebbe ricevere alcun input dell'utente. L'unica azione si svolge in lblDisplay2, con il suo evento ontick. Il pannello dovrebbe semplicemente aggiornare dopo gli eventi sul server con nuove informazioni. Se lblDisplay non sta postando nulla, quale è un'alternativa per realizzare questo? – LoganFrederick

+0

@Logan il controllo Label non ha un evento OnTick ... stai provando ad usare un controllo Timer? In tal caso, tale controllo dovrebbe essere PostBackTrigger, non l'etichetta. Le etichette non attivano gli eventi postback: si tratta di un evento lato client. Le etichette vengono scritte solo dal server. –

+0

Sì, sto cercando di utilizzare un controllo Timer e comprendere gli eventi sul lato server in C#, ma non capisco come interagisce e viene avviato sul lato client in ASP. Questo probabilmente sta portando a una domanda separata rispetto a quella originale. – LoganFrederick

Problemi correlati