2010-09-29 10 views
10

Ok, jestem doświadczonym web developerem, ale czasami ASP.Net mnie oszukuje. Mam stronę wzorcową w asp.net. Następnie mam stronę opartą na tej stronie wzorcowej (home.aspx). Teraz w home.aspx.cs Chcę uzyskać dostęp do asp: kontrola treści, aby programowo dodawać elementy sterujące.Access asp: treść z kodu za

Aspx wygląda następująco:

<asp:Content ID="leftCol" ContentPlaceHolderID="cphLeftCol" Runat="Server"> 
    <asp:PlaceHolder ID="phLeftCol" runat="server"> 
    </asp:PlaceHolder> 
</asp:Content> 

Spodziewam się, że mogę odwołać "leftCol" z mojego kodu tyłu. Ale tam nie wiadomo. Do testowania dodałem własny symbol zastępczy "phLeftCol". Mogę to odnieść bez problemów.

Czy jest coś, czego nie widzę?

Odpowiedz

17

Nie można uzyskać dostępu do asp: Kontrola treści bezpośrednio z Twojego kodu. Kontrola treści nie jest dodawana do heirarchii kontroli w środowisku wykonawczym, więc nie jest dostępna z kodu za dodawaniem kontrolek do środowiska wykonawczego. Aby dodać do niego elementy sterujące w środowisku wykonawczym, należy dodać do kontrolki treści kolejną kontrolkę kontenera i dodać do niej elementy sterujące (tak jak w przypadku formantu zastępczego).

Zobacz ten artykuł MSDN, aby uzyskać więcej informacji.

+1

Więc moje obejście jest najlepszy ćwiczyć. Jaka szkoda. – newtogit

+0

Istnieją inne kontrole kontenera, które lepiej pasują do twojej sytuacji niż kontrolka zastępcza (naprawdę musiałaby wiedzieć więcej o tym, co robisz), ale kontrola zawartości nie jest opcją. –

+2

Pomyśl o tym, że każdy obiekt ContentPlaceHolder (na stronie wzorcowej) i każdy pasujący obiekt Treści (strona treści) są po prostu przeciwległymi punktami końcowymi odsyłacza informującego system nadrzędnego/treściowego o tym, gdzie i co należy umieścić na stronie wzorcowej. Każdy obiekt ContentPlaceHolder na stronie wzorcowej po prostu wskazuje miejsce osadzenia materiału zdefiniowanego w każdym odpowiednim obiekcie Content na stronie zawartości. Ponieważ te obiekty służą jedynie jako łącze do tego, gdzie/co osadzić, są jak metaobiekty dla systemu nadrzędnego/treściowego, więc nigdy nie są częścią hierarchii kontrolnej. – Triynko

1

Nie można uzyskać dostępu do kontroli "leftCol" od strony kodowej strony głównej, ponieważ jest ona właścicielem treści tej strony, a kod strony głównej jest nieświadomy jego zawartości w momencie wstrzyknięcia ... można tylko kontrola dostępu w tej treści. wstrzykiwanie zawartość idzie w asp.net od dołu do góry, więc zawartość strony głównej, w tym przypadku wszystko pomiędzy znacznikami <asp:Content ID="leftCol" ...> and </asp:Content>, idzie w placeholder z wzorcowej ...

okrzyki