2009-07-23 5 views
7

Auch bei dem Versuch, eine Antwort auf dieses Problem zu finden, ich habe keine klare Erklärung nicht gefunden (vor allem eines nicht Gridviews diskutieren), wie die folgenden Fehler beheben ich erhalten, wenn ein Programm mit einem Update ausgeführt wird:Implementierung von INamingContainer Interface für UpdatePanel?

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

die Update ist:

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

Von meinem Verständnis, ich habe die INamingContainer Schnittstelle für lblDisplay zu implementieren, aber ich bin nicht ganz sicher, wie dies zu erreichen. Muss ich die UpdatePanel Informationen beziehen? Erstellen Sie ein neues Objekt für INamingContainer?

Antwort

9

Das Problem ist, dass Label kein Postback-Ereignis auslöst - es ist nicht interaktiv. Damit etwas als PostBackTrigger registriert wird, muss es irgendwie einen Postback-Befehl auslösen - normalerweise als Reaktion auf eine Benutzereingabe -, den das UpdatePanel dann abfangen kann. Oder das Steuerelement, das als Auslöser registriert wird, kann enthält Steuerelemente, die Postback-Ereignisse auslösen - z. ein INamingContainer (zum Beispiel ein Panel).

+0

Mein UpdatePanel soll keine Benutzereingaben erhalten. Die einzige Aktion findet in lblDisplay2 mit seinem ontick-Ereignis statt. Das Panel sollte einfach nach Ereignissen auf dem Server mit neuen Informationen aktualisiert werden. Wenn lblDisplay nichts zurückschickt, was ist eine Alternative dazu? – LoganFrederick

+0

@Logan das Label-Steuerelement hat kein OnTick-Ereignis ... versuchen Sie ein Timer-Steuerelement zu verwenden? Wenn dies der Fall ist, sollte diese Kontrolle Ihr PostBackTrigger sein, nicht das Label. Labels lösen keine Postback-Ereignisse aus - das ist ein clientseitiges Ereignis. Labels werden nur vom Server geschrieben. –

+0

Ja, ich versuche, ein Timer-Steuerelement zu verwenden und die Ereignisse auf der Serverseite in C# zu verstehen, verstehe aber nicht ganz, wie es interagiert und wird auf der Clientseite in ASP initiiert. Dies führt wahrscheinlich zu einer anderen Frage als die ursprüngliche. – LoganFrederick

Verwandte Themen