Un contrôle utilisateur dans un autre
Il peut arriver qu'on veuille utiliser un User Control dans un autre User Control. On obtient alors ce genre d'erreur :
/!\ L'erreur n'apparait que lorsque vous déclarez vos User Controls dans le web.config.
On ne peut pas inclure l'un dans l'autre deux User Controls qui se trouve dans le même dossier. La solution est donc toute simple, il suffit de créer deux dossiers différents pour les deux User Controls.
Si on veut éviter les deux dossiers, on peut ajouter dans l'User Control un tag Register :
<%@ Register TagPrefix="uc2" Src="~/UserControls/Recommend.ascx" TagName="UCRecommend" %>
Le problème devient plus complexe quand nous devons inséré un User Control dans lui-même. Qu'est-ce que cela veut dire? Prenons un exemple : Nous avons un User Control de menu. On voudrait gérer des menus à plusieurs niveaux, nous allons donc faire appel à l'User Control lui-même pour afficher le menu représentant le sous menu.
Dans ce cas là, il n'est pas question d'avoir le même User Control dans plusieurs dossiers. On peut alors utiliser la technique du code behind. Le principe est de placer un panel et de charger notre User Control au Page_Load du panel.
protected void pn1_Load(object sender, EventArgs e)
{
Panel pn1 = (Panel)sender;
UserControl uc = new UserControl();
UserControls_VideoInfo uc1 = (UserControls_VideoInfo)uc;
uc1 = (UserControls_VideoInfo)uc.LoadControl("~/UserControls/VideoInfo.ascx");
pn1.Controls.Add(uc1);
}
Ou encore (si on revient dans notre premier cas et qu'on ne veut pas plusieurs dossiers) :
protected void pn1_Load(object sender, EventArgs e)
{
Panel pn1 = (Panel)sender;
UserControl uc = new UserControl();
pn1.Controls.Add(uc.LoadControl("~/UserControls/Recommend.ascx"));
}
Voilà, en espérant que ça aidera d'autres :-).
PS : Merci à Gaëlle et à Kim pour leur aide.
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :