user web control avec template
Le
Thierry Schembri
Excusez mon précédent message, mais mon lecteur de news a posté avant
que j'aie eu le temps de terminer !
Bonjour,
Je suis confronté au probleme suivant :
Je voudrais faire un user web control qui en fait "habillerait" un
contenu qui pourrait être libre. Je procède ainsi :
1) Je crée donc un web control qui contient seulement le code html
suivant (c'est un exemple) :
<hr>
<asp:PlaceHolder id="contenu" runat="server" />
<hr>
Le contenu "libre" sera placé dans le place holder.
2) J'associe le code suivant à ce controle :
private ITemplate content = null;
[TemplateContainer(typeof(MessageContainer))]
public ITemplate Content
{
get { return content; }
set { content = value; }
}
void Page_Init()
{
if (content != null)
{
MessageContainer container = new MessageContainer(0);
content.InstantiateIn(container);
contenu.Controls.Add(container);
}
}
public class MessageContainer : Control, INamingContainer
{
private int index;
internal MessageContainer(int index) { this.index = index; }
public int Index { get { return index; } }
}
3) Je place mon controle sur une nouvelle page :
<uc1:toto>
<Contenu>
<asp:Label id="label" runat="server" text="tagada" />
</Contenu>
</uc1:toto>
4) Je compile, je lance. J'obtiens bien à l'écran la chaine "tagada"
insérée dans mon user control (en l'occurence entre deux <hr>).
5) Là, ca se corse, je voudrais, dans le code de ma page faire :
label.Text = "pouet"
hélas, ça ne marche pas, j'obtiens "The name 'label' does not exist in
the current context.
Ma question : comment faire pour acceder à partir de la page contenant
le user control aux controles se trouvant dans sa zone "libre" ?
Merci d'avance (d'avoir lu un si long message et de m'aider).
Thierry
que j'aie eu le temps de terminer !
Bonjour,
Je suis confronté au probleme suivant :
Je voudrais faire un user web control qui en fait "habillerait" un
contenu qui pourrait être libre. Je procède ainsi :
1) Je crée donc un web control qui contient seulement le code html
suivant (c'est un exemple) :
<hr>
<asp:PlaceHolder id="contenu" runat="server" />
<hr>
Le contenu "libre" sera placé dans le place holder.
2) J'associe le code suivant à ce controle :
private ITemplate content = null;
[TemplateContainer(typeof(MessageContainer))]
public ITemplate Content
{
get { return content; }
set { content = value; }
}
void Page_Init()
{
if (content != null)
{
MessageContainer container = new MessageContainer(0);
content.InstantiateIn(container);
contenu.Controls.Add(container);
}
}
public class MessageContainer : Control, INamingContainer
{
private int index;
internal MessageContainer(int index) { this.index = index; }
public int Index { get { return index; } }
}
3) Je place mon controle sur une nouvelle page :
<uc1:toto>
<Contenu>
<asp:Label id="label" runat="server" text="tagada" />
</Contenu>
</uc1:toto>
4) Je compile, je lance. J'obtiens bien à l'écran la chaine "tagada"
insérée dans mon user control (en l'occurence entre deux <hr>).
5) Là, ca se corse, je voudrais, dans le code de ma page faire :
label.Text = "pouet"
hélas, ça ne marche pas, j'obtiens "The name 'label' does not exist in
the current context.
Ma question : comment faire pour acceder à partir de la page contenant
le user control aux controles se trouvant dans sa zone "libre" ?
Merci d'avance (d'avoir lu un si long message et de m'aider).
Thierry

Poser une question


Votre contrôle ressemble au Repeater d'Asp.net.
N'est il pas possible dans le contexte de votre application d'attacher
les données de la même façon ?
C'est à dire soit en utilisant :
<uc1:toto>
<Contenu>
<asp:Label id="label" runat="server" text='<%#
DataBinder.Eval(Container.DataItem, "MaPropriété") %>' />
</Contenu>
</uc1:toto>
Soit en souscrivant a un évènement OnItemDataBound.
Et a l'intérieur de celui-ci écrire :
Label oLbl = e.Item.FindControl("label") as Label;
if (oLbl != null)
oLbl.Text = "pouet";
Enfin je vous renvoie à cet excellent article de Scott Mitchell qui
traite en profondeur ce type de contrôle.
http://msdn.microsoft.com/asp.net/d...Cntrls.asp
Franck Quintana
Active+ Software
http://www.activeplus.com
déçu d'un article de Scott Mitchell ;-))
Franck Quintana
Active+ Software
http://www.activeplus.com