2009-11-04 8 views
8

Podczas programowego dodawania elementów sterujących użytkownika za pomocą funkcji LoadControl (ścieżka ciągu), gdy w cyklu życia strony kontrolnej użytkownika inicjuje ona swoje podrzędne elementy sterujące za pomocą stanu wyświetlania?ASP.NET: Wyświetlanie i programowe dodawanie elementów sterujących użytkownika

Zadaję to pytanie, ponieważ jedna z moich formantów użytkownika, które są programowo ładowane, ma kontrolkę TextBox, która nie jest inicjowana/ładowana przez jej stan widoku na PostBack w zdarzeniu Page_Load (co nie ma miejsca w przypadku zwykłego. strony aspx i stąd moje zamieszanie). Ogólnie rzecz biorąc, muszę pobrać wartości z formantu Textbox.

Dzięki

Odpowiedz

11

ViewState jest ładowany przed zdarzenia Page_Load. Jeśli chcesz, aby sterowanie działało z ViewState, musisz je załadować i dodać do strony przed tym wydarzeniem. Zazwyczaj na PreInit.

Odniesienie cykl życia jest tutaj:
http://msdn.microsoft.com/en-us/library/ms178472.aspx?ppud=4

Przeczytaj opis przypadku Pre Load, który bezpośrednio poprzedza wczytywania strony:

użyć tego zdarzenia, jeśli trzeba wykonać obróbkę na swojej stronie lub kontrolować przed zdarzeniem Load.

Przed instancja Page budzi to wydarzenie, ładuje widok stanu dla siebie i wszystkich kontroli, a następnie przetwarza żadnych danych odświeżenie dołączone instancji żądanie.

Tak więc przez czas wstępnego obciążenia jest już za późno. Ponadto opis zdarzenia PreInit wyraźnie wspomina, że ​​jest to miejsce, w którym można "tworzyć lub odtwarzać dynamiczne elementy sterujące".

+0

Dzięki! W powiązanej notatce kontrolka użytkownika, którą dodam programowo, odbywa się w innej kontrolce użytkownika, która jest ładowana deklaratywnie. To zadeklarowane zdarzenie PreInit kontroli rodzicielskiego użytkownika nie zostanie wywołane (dlatego nie zostanie wywołana metoda "protected void Page_PreInit (object sender, EventArgs e)"). Czy wiesz, dlaczego Page_PreInit nie jest wywoływana w zadeklarowanej kontroli użytkownika? – burnt1ce

+0

Formanty same w sobie nie mają pre-init, ponieważ zdarzenia cyklu życia strony kontrolnej są wywoływane ze strony iw punkcie PreInit kontrole nie są jeszcze gotowe. Zamiast tego użyj Init. –

+0

Dziękuję bardzo. Twoja sugestia mnie uratowała. =) – burnt1ce

Powiązane problemy