2008-10-28 14 views
14

Dentro de mi página, tengo los siguientes:ASP.NET control de usuario no inicializa los controles secundarios

<aspe:UpdatePanel runat="server" ID="updatePanel"> 
    <ContentTemplate> 
     <local:KeywordSelector runat="server" ID="ksKeywords" /> 
    </ContentTemplate> 
</aspe:UpdatePanel> 

KeywordSelector El control es un control defino en el mismo montaje y local se asigna a su espacio de nombres.

El control está compuesto por varios otros controles y se define como tal:

<%@ Control Language="C#" AutoEventWireup="true" 
      CodeBehind="KeywordSelector.ascx.cs" 
      Inherits="Keywords.KeywordSelector" %> 

y tiene un buen número de controles de servidor de su propio, todos definidos como miembros en el archivo .designer.cs.

Sin embargo, durante ninguna parte del ciclo de vida del control de modo que carece de objetos de control hijo ni produce HTML:

  1. Todos los miembros definidos en el archivo .designer.cs son null.
  2. Llamadas al HasControls return false.
  3. Las llamadas al EnsureChildControls no hacen nada.
  4. La colección Controls está vacía.

Al quitar el UpdatePanel no funcionó. Traté de reproducirlo en una página limpia con un nuevo UserControl y sucede lo mismo.

Estoy usando ASP.NET sobre .NET Framework 3.5 SP1 con el servidor web integrado.

¿Qué me falta aquí?

Actualización # 1: siguiente comentario de Rob, me miró a los OnInit y encontró que la UserControl no detecta que tiene los controles secundarios. ¡Además, nunca se llama CreateControlCollection!

+0

¿Estás cargando dinámicamente este control? – thismat

+0

No. Lea sobre ellos también ... –

+0

¿Ha anulado OnInit y eliminado la línea base.OnInit (e); ¿en accidente? – Rob

Respuesta

24

Bueno, he encontrado el problema (s):

  1. Controles de usuario, en comparación con controles personalizados deben estar registrados uno por uno en el web.config archivo. Haga lo siguiente:

    <add tagPrefix="local" tagName="KeywordSelector" src="~/KeywordSelector.ascx" />

    en lugar de:

    <add tagPrefix="local" namespace="Keywords" assembly="Keywords" />

  2. Nunca se debe colocar una WebControl en el mismo directorio que el Control que lo está utilizando. Esto es francamente tonto. Read about it here.

Gracias por la ayuda. Ahora si solo pudiera marcar mi propia respuesta como la respuesta ...

+2

Oh, gracias por una solución :) –

+0

Me alegro de que haya ayudado a alguien :) –

+0

¡Pasé horas tratando de resolver esto! Problema muy oscuro (y demasiados hits positivos falsos al intentar darle una respuesta a Bing). ¡Gracias! –

0

En mi caso, el motivo fue la ReSharper 7.1 añade Directiva @Register incorrectos en la parte superior del aspx - en lugar de esta fila deseada:

<%@ Register Src="~/Controls/Hello/Hello.ascx" TagName="Hello" TagPrefix="p" %> 

me dieron mal uno:

<%@ Register TagPrefix="p" Namespace="MyNamespace.WebApp.Controls" Assembly="MyApp.Web" %> 
Cuestiones relacionadas