2009-06-11 10 views
3

J'ai un contrôle ASP.NET qui lie les données à un répéteur. À l'intérieur de ce répéteur, j'ai un autre contrôle utilisateur personnalisé. Je souhaite transmettre une valeur à ce second contrôle en fonction de l'élément de liaison actuel.ASP.NET: Lier une valeur à un contrôle utilisateur personnalisé dans un répéteur

<asp:Repeater runat="server" ID="ProductList"> 
    <ItemTemplate> 
     <p>Product ID: <%# Eval("ProductID") %></p> 
     <myControl:MyCoolUserControl runat="server" ProductID='<%# Eval("ProductID") %>' /> 
    </ItemTemplate> 
</asp:Repeater> 

Le modèle d'élément répéteur imprime correctement mon ID de produit avec la déclaration Eval, mais quand je fais la même chose pour passer l'ID de produit à MyCoolUserControl, il ne fonctionne pas (si ProductID sur MyCoolUserControl est Nullable Int32 - Je peux le déboguer et c'est toujours nul).

Des idées comment je peux le faire?

+0

Pouvez-vous montrer le code de votre MyCoolUserControl? – Michael

Répondre

3

J'ai fait un petit test et j'ai réussi à le faire si le ProductID est une chaîne. Après je l'ai changé et int dans le contrôle usercol j'ai eu les mêmes problèmes. J'ai fait un int.Parse dans la source de données au répéteur et je l'ai fait fonctionner à nouveau. Vérifiez que le ProductId que vous transmettez dans la source de données de répéteurs est de type int.

Application Mytest.

string[] values = new string[]{ "12", "13" }; 

MyRepeater.DataSource = from v in values 
         select new 
         { 
          ProdId = int.Parse(v) 
         }; 

MyRepeater.DataBind(); 

<asp:Repeater runat="server" ID="MyRepeater"> 
    <ItemTemplate> 
     <My:control runat="server" ProductId='<%# Eval("ProdId") %>' /> 
    </ItemTemplate> 
</asp:Repeater> 

et dans le usercontrol:

public int? ProductId 
{ 
    set { MyLabel.Text = value.Value.ToString(); } 
} 
Questions connexes