2010-07-01 7 views
7

Jak uzyskać kontrolę w wydarzeniu ASP.NET PreInit? Wskaźniki są puste, a metoda FindControl zwraca wartość null.Jak uzyskać kontrolę w wydarzeniu ASP.NET PreInit?

Używam stron wzorcowych i stron z treścią. Markup strony zawartości wygląda następująco:

<asp:Content ID="Content2" ContentPlaceHolderID="ContentBody" runat="server"> 
    <asp:Table ID="Table1" runat="server" Width="100%"> 
     ..... 
    </asp:Table> 
</asp:Content> 

i kod tak:

private void Page_PreInit(object sender, EventArgs e) 
{ 
    Control table = this.FindControl("Table1"); 
    //table is null here 
} 

Więc tabeli nadal jest zerowy po this.FindControl ("Tabela1"). NamingContainer strony również ma wartość zerową. Co ja robię źle?

AKTUALIZACJA Muszę użyć tego zdarzenia, aby utworzyć formanty. Jak wspomniano w ASP.NET Page Life Cycle Overview to zdarzenie powinno być używane do tworzenia dynamicznych kontroli. Muszę utworzyć listę linków w mojej tabeli. Być może jest inny sposób na zrobienie tego?

+0

Nie jestem pewien, co robisz źle. Czy musisz korzystać ze zdarzenia PreInit? Czy możesz użyć późniejszego wydarzenia, takiego jak Init? –

+0

Tak jak Matthew mówi, że późniejsze wydarzenie może ci bardziej odpowiadać. Podejrzewam, że jest on inicjowany, ponieważ wiele elementów sterujących jest rzeczywiście połączonych, więc jeśli spróbujesz uzyskać dostęp do rzeczy zbyt wcześnie w cyklu życia, wszystko się rozpada. http://msdn.microsoft.com/en-us/library/ms178472.aspx może się przydać, jeśli już go nie widziałeś. – Chris

+0

Po przeczytaniu twojej edycji generalnie dodaję rzeczy do drzewa kontrolnego w zdarzeniu page_load. Nie jestem pewien, co ta sekcja, którą cytujesz, odnosi się do szczerości, ale myślę, że nie oznacza to po prostu dodawania linku do strony ... – Chris

Odpowiedz

4

PreInit jest uruchamiany przed zainicjowaniem formantów. Więcej informacji można znaleźć na stronie ASP.NET Page Life Cycle.

Init
Raised po wszystkie kontrole zostały zainicjowane i wszelkie skórne ustawienia zostały zastosowane. Zdarzenie Init poszczególnych kontrolek występuje przed zdarzeniem Init strony.

Skorzystaj z tego zdarzenia, aby odczytać lub zainicjować właściwości sterowania .

+0

Zobacz moją aktualizację. –

0

W zdarzeniu PreInit() standardowe (zdefiniowane) elementy sterowania nie zostały jeszcze utworzone na tym etapie, dlatego nie można uzyskać żadnych odniesień do żadnych elementów sterujących.

Skorzystaj ze zdarzenia Page_Load(), aby utworzyć dynamiczne elementy sterujące. Podczas tego wydarzenia można dodać dowolne dynamiczne elementy sterujące do istniejących elementów sterujących.

Po utworzeniu dynamicznych elementów sterujących w Page_Load(), użyj PreRender(), aby wprowadzić zmiany/aktualizacje.

Osobiście używam PreInit do definiowania obiektów o szerokości strony (tj. Połączeń z bazą danych, obiektów sesji użytkownika), a także do przeprowadzania sprawdzeń uwierzytelniania zabezpieczeń (i przekierowań, jeśli nie są autoryzowane).

Powiązane problemy