2008-10-28 6 views
14

intérieur de ma page, je donne les résultats suivants:ASP.NET UserControl n'initialise pas Controls enfant

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

Le contrôle KeywordSelector est une commande que je DEFINE dans le même ensemble et local est mis en correspondance à son espace de noms.

Le contrôle est composé de plusieurs autres contrôles et est défini comme tel:

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

et a un bon nombre de contrôles serveur propre, tous définis comme membres dans le fichier .designer.cs.

Cependant, pendant aucune partie du cycle de vie du contrôle-t-il des objets de contrôle de l'enfant et ne produit HTML:

  1. Tous les membres définis dans le fichier .designer.cs sont null.
  2. Appels à HasControls renvoient false. Les appels vers EnsureChildControls ne font rien.
  3. La collection Controls est vide.

Suppression de la UpdatePanel n'a pas bien. J'ai essayé de le reproduire dans une page propre avec un nouveau UserControl et la même chose arrive. J'utilise ASP.NET sur .NET Framework 3.5 SP1 avec le serveur Web intégré.

Qu'est-ce qui me manque ici?

Mise à jour # 1: Après le commentaire de Rob, j'ai regardé dans OnInit et a constaté que la UserControl ne détecte pas qu'il a des contrôles enfants. De plus, CreateControlCollection n'est jamais appelé!

+0

Êtes-vous charger dynamiquement ce contrôle? – thismat

+0

Non. Lisez à propos de ceux aussi ... –

+0

Avez-vous redéfini OnInit et supprimez la ligne base.OnInit (e); par accident? – Rob

Répondre

24

Eh bien, je l'ai trouvé le problème (s):

  1. Contrôles utilisateur, par opposition à Custom Controls doivent être enregistrés un par un dans le web.config fichier. Pour ce faire:

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

    au lieu de:

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

  2. Vous ne devriez jamais placer un WebControl dans le même répertoire que le Control qui l'utilise. C'est carrément stupide. Read about it here.

Merci pour l'aide. Maintenant, si seulement je pouvais marquer ma propre réponse comme la réponse ...

+2

Oh mon, merci pour une solution :) –

+0

Heureux qu'il a aidé quelqu'un d'autre :) –

+0

Juste passé des heures à essayer de résoudre ce problème! Problème très obscur (et trop de faux positifs en essayant de répondre à Bing). Merci! –

0

Dans mon cas, la raison a été le ReSharper 7.1 ajouté directive @Register incorrect en haut de ASPX - au lieu de cette désirée rangée:

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

je suis mauvais:

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