2010-02-24 4 views
1

j'ai une page ASP avec le répéteur suivant:Pourquoi la collection ASP.NET Repeater.Items est-elle vide lorsque les contrôles sont à l'écran?

<asp:Repeater runat="server" ID="RegionRepeater" 
    DataSourceID="SqlDataSourceRegions" EnableViewState="true"> 
    <ItemTemplate> 
     <tr> 
      <td valign="top"> 
       <b><%#Eval("description")%></b> 
       <asp:HiddenField runat="server" ID="RegionID" 
        Value='<%#Eval("region_id")%>'/> 
      </td> 
      <td> 
       <asp:FileUpload ID="FileUpload" runat="server" Width="368px" /> 
      </td> 
     </tr> 
    </ItemTemplate> 
</asp:Repeater> 

(le répéteur est à l'intérieur d'un assistant, à l'intérieur d'une fenêtre de contenu).

Le code est derrière relié à la

protected void Wizard1_NextButtonClick(object sender, WizardNavigationEventArgs e) 
événement

. Il y a deux éléments sur l'écran (deux rangées à l'intérieur de la table). Cependant, lorsque le code essaie de lire ces éléments, la collection Items est vide! Pourquoi la collection est-elle vide lorsque des contrôles sont dessinés à l'écran? Pourquoi?

Merci beaucoup pour votre aide; Cela commence à me rendre fou.

(BTW: J'ai essayé d'ajouter/enlever la EnableViewState = tag "true")

Répondre

5

Avez-vous fait que le répéteur a été reprise sur le postback? Le ASP.NET Page Life Cycle signifie que lors d'une publication, vous devrez relier les contrôles comme le répéteur pour que les gestionnaires d'événements puissent voir les données.

+0

Doh! Je vous remercie. Beaucoup! (Les autres réponses sont toutes correctes - merci pour votre temps, celui-ci était le premier, donc je l'ai marqué comme accepté) – Ryan

1

Peut-être que vous faites la liaison de données chaque fois que vous chargez la page, vérifiez-vous qu'il n'y a pas de postbacl avant de le faire?

1

Je crois que les éléments ne sont remplis que lorsqu'ils sont liés. Vous devez donc relier vos données à chaque chargement de page. Ceci est dû à l'environnement sans état du web; il ne se souvient pas de la source de données, mais charge les contrôles créés à partir de viewstate qui y étaient liés. Par conséquent, lors de requêtes ultérieures, il charge la hiérarchie de contrôle mais ne sait rien de la source de données qui a créé l'interface utilisateur, sauf si vous le relancez de nouveau.

HTH.

2

Vérifiez si vous avez un Page.DataBind() dans le code de page derrière. Cela rend votre répéteur à lier avec des données vides.

+0

Cet indice a fait le travail pour moi. J'avais des cases à cocher dans le répéteur, si je lia le répéteur à l'intérieur! IsPostBack, le répéteur était effacé et si je ne vérifiais pas IsPostBack, la sélection par l'utilisateur des cases à cocher s'effaçait. Votre indice a fait l'affaire. J'avais Page.DateBind dans la page maître ... merci –

Questions connexes