2009-06-02 16 views

Antwort

11

Sie sollten im Allgemeinen an oder nach Load() binden. Das Ereignis Init() soll Ihnen ermöglichen, dynamisch erstellte Steuerelemente vor Bindungsereignissen zu erstellen, damit sie vorhanden sind, wenn die Bindung stattfinden soll. Load() ist jedoch nicht die einzige Option ... Wenn Sie aus irgendeinem Grund die Bindung an ein Steuerelement verzögern müssen, können Sie auch das Ereignis PreRender() binden. Es ist auch möglich, in Load() weitere Einstellungen vorzunehmen, die DataBind() -Methode der Seiten aufzurufen und die Seitenbindungsereignisse zu verarbeiten, um bei Bedarf noch strukturierter zu binden.

+0

+1 für die Erwähnung von 'PreRender' (ich vernachlässige es zu erwähnen), weil es' EnsureChildControls' rekursiv auf allen Kindern aufruft. – Cerebrus

+1

Irgendwelche Hinweise auf Best Practice? Bei so vielen Events zur Auswahl, scheint es als ob es keine klare beste Wahl gibt. Insbesondere PreRender vs. Control DataBinding Event-Handler. Argh, Gott sei Dank für MVC –

+1

Ditto @ MVC. : D Was die beste Vorgehensweise angeht ... Beginnen Sie mit Load() und verfeinern Sie sie nach Bedarf. Load() ist im Allgemeinen der beste Startpunkt, wenn Sie nicht wissen, dass Sie später eine Bindung benötigen, oder einen bestimmten Grund haben, die gesamte Seite DataBind auszulösen. Meistens, wenn Sie in PreRender binden müssen, hängt es von einem Ausführungs- und Bestellproblem ab, das häufig dann auftritt, wenn alles, was an ein Steuerelement gebunden ist, davon abhängt, dass ein anderer Prozess zuerst abgeschlossen wird. – jrista

3

Es hängt von dem speziellen Fall ab, aber die häufigste Antwort wäre Page_Load, weil das im Allgemeinen für die meisten Datenbindungsszenarien ausreichend ist.

Auch für komplexe Datenbindung Szenarien Page_Init würde nicht ein geeigneter Ort sein, weil Container-Steuerelemente wie Gridview nur während der Page_Load Veranstaltung ihre Kinder laden. Sie müssen den Lebenszyklus weiter durchlaufen, um auf diese Kinder zugreifen zu können.

In meinem Fall wäre die Antwort jedoch "weder". Dies liegt daran, dass ich niemals eine Kontrolle direkt innerhalb von Page_Load databind. Was ich stattdessen vorziehe, ist eine separate Methode, die die Datenbindung durchführt und von Page_Load oder einer anderen Funktion aufgerufen werden kann, wenn ich nach Postbacks neu binden muss.