2010-10-29 6 views
1

J'ai un répéteur qui est mise en boucle un contrôle utilisateur, comme ceci:ASP.NET répéteur ne lie pas après ItemCommand

   <asp:Repeater ID="repItems" runat="server" EnableViewState="false" 
       OnItemCommand="repItems_ItemCommand"> 
      <ItemTemplate> 
       <dmg:confirmItem runat="server" 
       OnDataBinding="confirmitemItem_DataBinding" 
       Basket="<%# Container.DataItem %>" /> 
      </ItemTemplate> 

      </asp:Repeater> 

Mon code ressemble derrière comme ceci:

public void BindItems(List<ShopBasket> baskets) 
    { 
     _baskets = baskets; 
     repItems.DataSource = baskets; 
     repItems.DataBind(); 
    } 

Mon personnalisée contrôle utilisateur ressemble à ceci:

public ShopBasket Basket; 
     protected void Page_Load(object sender, EventArgs e) 
     { 

      imgItem.ImageUrl = ShopImagePath + Basket.ImageFilename; 
      ...etc... 
     } 

Tout fonctionne brillamment la première fois, les articles du panier sont liés aux objets Panier Tout est génial. Cependant, quand je reçois une ItemCommand de mon répéteur, et que je mets à jour le contenu du panier (Note: Aucune addition ou suppression n'est faite ici, il suffit de mettre à jour la quantité) puis je reconnais les dernières valeurs et BOOM! Référence Null - aucun objet Basket dans le contrôle utilisateur Page_Load. C'est malgré le traçage à travers pour voir que la méthode BindItems() est appelée comme d'habitude, et les paniers sont là.

Je présume que cela a quelque chose à voir avec le cycle de vie, mais il m'a battu.

Des idées?

Merci Duncan

Répondre

2

Il est un peu dangereux d'avoir un champ public Stocke un élément étant lié, en particulier lorsque vous avez plusieurs éléments. Une façon plus sûre de le faire est d'extraire le panier en tant que DataItem lié au répéteur, et de faire quelque chose avec cela dans l'événement ItemCommand du répéteur. ItemDataBound serait encore plus sûr car vous savez que le panier existerait (puisqu'il est lié aux données), Page_Load n'est pas une option sûre ici ...

HTH.

+0

Merci de me répondre. J'ai du mal à comprendre (peut-être parce qu'il est 19h15!) Car je ne vois pas ce qui ne va pas avec ce que je fais. Gardez à l'esprit que le LoadLoad décrit ci-dessus est sur mon contrôle utilisateur ... donc cela aurait dû recevoir le panier à partir des données du répéteur lier maintenant? Sauf si c'est là que je me trompe? – Duncan

+0

Quand relies-tu encore? Le panier n'est pas conservé pendant les publications de page, et d'après ce que je vois, la reliure doit avoir lieu avant les incendies de chargement de page, ce qui n'est probablement pas le cas. –

+0

Je lie sur PageLoad en ce moment, juste comme http://weblogs.asp.net/infinitiesloop/archive/2006/10/16/TRULY-Understanding-Dynamic-Controls-_2800_Part-4_2900_.aspx me dit de faire! – Duncan

Questions connexes