Wenn ich ein Etikett in einem ItemTemplate eines Repeaters habe, ist die Bezeichnung Null, wenn ich versuche, über Repeater.Items [0] .FindControl ("Label") darauf zuzugreifen. In der Tat ist Items 0, obwohl ich 1 ItemTemplate habe. Erst nachdem ich das OnItemDataBound-Ereignis verwendet habe, kann ich das Steuerelement über das e-Argument finden. Ich bin neugierig, warum ich das OnItemDataBound-Ereignis verwenden muss, anstatt nur repeater.Items [0] .FindControl ("label") zu verwenden. Kann jemand das erklären?Warum ist ein Label nur über das Ereignis OnItemDataBound des Repeaters zugänglich?
0
A
Antwort
1
Wenn Sie eine Vorlage für einen Repeater erstellen, teilen Sie dem Repeater nur mit, was zur Ausführungszeit eingefügt werden soll - diese Steuerelemente werden nicht auf dieselbe Weise initialisiert, als wenn sie nicht Teil einer Vorlage wären.
Die Steuerelemente in der Vorlage werden erstellt, wenn der Repeater datengebunden ist. Aus diesem Grund können Sie erst im Lebenszyklus des Repeaters darauf zugreifen.
Das erklärt warum, wenn ich ein <# Eval ("...") innerhalb eines Repeaters mache, funktioniert es ok, aber wenn ich versuche, auf eine label.text -Eigenschaft zuzugreifen, schlägt es fehl und ich muss das OnItemDatabound-Ereignis verwenden . – Xaisoft
Habe ich den obigen Kommentar richtig gelesen? Danke für Ihre Hilfe. – Xaisoft
@Xaisoft - Ja, Sie haben Recht! –