2011-08-18 3 views
2

J'ai un usercontroll qui accepte un paramètre et j'ai besoin d'insérer ce usercontrol dans repeater et passer un paramètre de la liste <> à chacun, je le fais comme ça :Comment passer un paramètre à un usercontrol dans un répéteur

<asp:Repeater ID="winnersRepeater" runat="server"> 
    <ItemTemplate> 
    <uc:myControl ID="myControl" NodeId="<%# DataBinder.Eval(Container.DataItem,"Id")%>" runat="server" />   
    </ItemTemplate> 
</asp:Repeater> 

J'obligatoire dans PageLoad:

List<Winner> winners = new List<Winner>(); 
//... 
winnersRepeater.DataSource = winners; 
winnersRepeater.DataBind(); 

il ne fonctionne pas, je reçois Error creating usercontrol... The server tag is not well formed.

Comment puis-je faire? merci

Répondre

5

L'astuce ici est avec des guillemets - vous utilisez des guillemets doubles pour ouvrir et fermer la propriété NodeId ici, et pour inclure la chaîne dans l'expression. Vous devez utiliser des guillemets simples à un endroit et deux dans l'autre.

+0

Ok, vous avez raison, j'ai essayé de leur échapper mais cela n'a pas fonctionné alors j'ai pensé le problème quelque part dans le cycle de vie de la page. Cela fonctionne 'NodeId = '<% # DataBinder.Eval (Container.DataItem," Id ")%>'' mais pas l'inverse. Merci – Burjua

2

Vous pouvez gérer l'événement ItemDataBound du répéteur. Dans votre gestionnaire, vous devriez être capable de faire FindControl ("myControl") et lui passer la valeur NodeId sans avoir à le déclarer dans le balisage.

+0

Merci ddc, l'autre solution semble plus simple :) – Burjua

Questions connexes