2009-07-23 12 views
7

Nawet próbując znaleźć odpowiedź na ten problem, nie znalazłem żadnego wyraźnego wyjaśnienia (zwłaszcza jeden nie omawiając GridViews) o tym, jak rozwiązać następujący błąd I otrzymane podczas uruchamiania programu z UpdatePanel:Implementacja interfejsu INamingContainer dla UpdatePanel?

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

UpdatePanel jest:

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

z mojego zrozumienia, muszę zaimplementować interfejs INamingContainer dla lblDisplay, ale nie jestem pewien, w jaki sposób tego dokonać. Czy muszę podawać databind informacje UpdatePanel? Utwórz nowy obiekt dla INamingContainer?

Odpowiedz

9

Problem polega na tym, że Label nie wywołuje zdarzenia oddzwonienia - nie jest interaktywne. Aby coś zostało zarejestrowane jako PostBackTrigger, musi jakoś uruchomić polecenie Postback - zazwyczaj w odpowiedzi na pewne dane wprowadzone przez użytkownika - które następnie może przechwycić UpdatePanel. lub kontrola zarejestrowana jako wyzwalacz musi mieć możliwość zawierania elementów sterujących, które wywołują zdarzenia odświeżania - np. INamingContainer (na przykład Panel).

+0

Mój UpdatePanel nie powinien otrzymywać żadnych danych wejściowych od użytkownika. Jedyna akcja ma miejsce w lblDisplay2, z jego zdarzeniem ontick. Panel powinien po prostu odświeżyć po wydarzeniach na serwerze nowe informacje. Jeśli lblDisplay nie wysyła niczego z powrotem, jaka jest alternatywa dla osiągnięcia tego? – LoganFrederick

+0

Konto @ Logan Label nie ma zdarzenia OnTick ... czy próbujesz użyć kontrolki Timer? Jeśli tak, to kontrola powinna być Twoją PostBackTrigger, a nie etykietą. Etykiety nie wywołują zdarzeń odświeżenia - to zdarzenie po stronie klienta. Etykiety są zapisywane tylko z serwera. –

+0

Tak, próbuję użyć kontrolki licznika czasu i rozumiem zdarzenia po stronie serwera w języku C#, ale nie bardzo rozumiem, jak to komunikuje i jest inicjowana po stronie klienta w ASP. To prawdopodobnie prowadzi do oddzielnego pytania niż pierwotnego. – LoganFrederick