2009-07-23 15 views
7

Incluso al tratar de encontrar una respuesta a este problema, no he encontrado ninguna explicación clara (especialmente uno no discutir GridViews) sobre la manera de resolver el siguiente error recibo cuando se ejecuta un programa con un UpdatePanel:Implementando la interfaz INamingContainer para UpdatePanel?

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

el UpdatePanel es:

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

Desde mi entender, que tienen que implementar la interfaz INamingContainer para lblDisplay, pero no estoy muy seguro sobre cómo lograr esto. ¿Debo vincular la información de UpdatePanel? Crear un nuevo objeto para INamingContainer?

Respuesta

9

El problema es que Label no activa un evento de devolución de datos, no es interactivo. Para que algo se registre como PostBackTrigger, de alguna manera se debe activar un comando de devolución de datos, generalmente en respuesta a alguna entrada del usuario, que el Panel de actualización puede interceptar. O el control registrado como el activador debe poder contener controles que activan eventos de devolución de datos, p. un INamingContainer (por ejemplo, un Panel).

+0

Mi UpdatePanel no debe recibir ninguna entrada del usuario. La única acción tiene lugar en lblDisplay2, con su evento ontick. El panel simplemente debe actualizar los eventos en el servidor con nueva información. Si lblDisplay no está publicando nada, ¿cuál es la alternativa para lograr esto? – LoganFrederick

+0

@Logan el control Label no tiene un evento OnTick ... ¿está tratando de usar un control Timer? Si es así, ese control debería ser su PostBackTrigger, no la etiqueta. Las etiquetas no activan los eventos de devolución: es un evento del lado del cliente. Las etiquetas solo se escriben desde el servidor. –

+0

Sí, estoy tratando de usar un control Timer, y entiendo los eventos en el lado del servidor en C#, pero no entiendo cómo interactúa y se inicia en el lado del cliente en ASP. Esto probablemente conduzca a una pregunta separada que la original. – LoganFrederick

Cuestiones relacionadas