2009-04-10 8 views
0

Comment puis-je ajouter deux contrôles utilisateur Web dans la même page ASPX dynamiquement? Lorsque j'essaie de faire cela, j'obtiens l'erreur suivanteDoutils ASP.NET

Impossible de convertir un objet de type 'ASP.webusercontroladult_ascx' en type 'WebUserControl'.

Je suis en mesure d'ajouter 1 contrôle utilisateur Web dynamiquement

for (int i = 0; i < 2; i++) 
{ 
    Control uc = (WebUserControl)Page.LoadControl("WebUserControlAdult.ascx"); 
    Panel1.Controls.Add(uc); 
    Panel1.Controls.Add(new LiteralControl(@"<br />")); 
} 
+0

LOL au titre. Pourquoi essayez-vous d'ajouter des contrôles dynamiquement? Pour un forblock, avez-vous essayé le contrôle Repeater à la place? –

+0

Ouais, j'utiliserais le répéteur à cet effet – RobS

+0

Pouvez-vous élaborer sur les commandes de répéteur? –

Répondre

1

Avez-vous essayé de placer un ID pour le contrôle de l'utilisateur?

Control uc = (WebUserControl)Page.LoadControl("WebUserControlAdult.ascx"); 
uc.id = "Dyn" + i.tostring(); 
Panel1.Controls.Add(uc); 

Est-ce que UserControl est casté au mauvais type? Peut-être

(WebUserControlAdult)Page.LoadControl ... 
+0

À quoi sert de définir un ID? –

+0

l'ID identifie de façon unique le contrôle - doit être UNIQUE sur toute la page. –

1

Le problème semble être dans la distribution plutôt que dans la boucle.

Je ne vois pas l'exigence de la distribution explicite dans votre cas. Vous pouvez simplement faire quelque chose comme:

for (int i = 0; i < 2; i++) 
{ 
    Control uc = Page.LoadControl("WebUserControlAdult.ascx"); 
    Panel1.Controls.Add(uc); 
    Panel1.Controls.Add(new LiteralControl(@"<br />")); 
} 

Et cela devrait fonctionner. Toutefois, si vous deviez définir des propriétés explicites exposées par la classe WebUserControlAdult, vous auriez besoin de diffuser. Dans ce cas, vous devez convertir le type de classe usercontrol (comme l'a illustré @benophobia).

0

Si votre WebUserControl est un contrôle de base de données, vous pouvez envisager d'utiliser Repeater Controls.

L'utilisation d'un contrôle de répéteur, vous ne devrez mettre votre commande dans le ItemTemplate du répéteur, par exemple,

<asp:Repeater ID="bunchOfControls" runat="server"> 
    <HeaderTemplate> 
     <ul> 
    </HeaderTemplate> 
    <ItemTemplate> 
     <li> 
      <namespace:WebUserControlAdult runat="server /> 
     </li> 
    </ItemTemplate> 
    <FooterTemplate> 
     </ul> 
    </FooterTemplate> 
</asp:Repeater> 
0

traitant de contrôles utilisateur dynamique peut être une douleur dans le cul. En règle générale, chaque fois que vous créez un contrôle utilisateur dynamique, vous devez définir son identifiant afin qu'ASP.net puisse le réaffecter à posteriori, et pour conserver les valeurs des contrôles après la publication, vous devez recharger votre contrôles utilisateur sur l'événement Page_Init.

espérons que cela aide.