2009-05-17 13 views
7

Czy jest jakaś różnica między tymi dwoma scenariuszami:Jak uzyskać dostęp do kontroli wewnątrz zagnieżdżonej strony wzorcowej? dlaczego zachowuje się inaczej niż strony treści?

(1) Dostęp do nieruchomości na stronie wzorcowej od zwykłego dziecka

(2) Dostęp do nieruchomości na stronie wzorcowej z zagnieżdżonego stronie wzorcowej

próbowałem uzyskać dostęp do pola tekstowego na stronie głównej od strony zawartości tak:

TextBox a; 
a = (TextBox)Master.FindControl("ayyash"); // Master is declared in MasterType directive 
defaultTextbox.Text = a.Text; // defaultTextBox is a textbox control inside default.aspx 

to działa, ale wtedy, kiedy stosuje tę samą metodę na zagnieżdżone strony wzorcowej:

TextBox a; 
a = (TextBox)Master.FindControl("ayyash"); // Master is declared in MasterType directive 
myTextBox.Text = a.Text; // myTextBox is a textbox control inside child.master 

To nie działa, czy czegoś brakuje? Wywołuję oba kody wewnątrz regulare page_load handler ...

Zauważyłem też, że nie mogę ustawić wartości pola tekstowego wewnątrz zagnieżdżonej strony wzorcowej z kodu, jest zdecydowanie coś im brakuje, co to jest? aby rzucić światło na ten problem, oto przykład:

Zagnieżdżony Mistrz strony:

<%@ Master Language="C#" MasterPageFile="MasterPage.master" AutoEventWireup="false" CodeFile="MasterPage2.master.cs" Inherits="MasterPage2" %> 
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> 

<asp:textbox id="tx2" runat="server" text="this is two"></asp:textbox> 
<asp:contentplaceholder id="newstuff" runat="server"></asp:contentplaceholder> 
</asp:Content> 

Kod za:

Response.Wrote(tx2.Text); 

mam NIC, dlaczego to, co mnie ominęło? pamiętać, że próbowałem również rekurencyjnej kontroli znajdują się:

String str = ((TextBox)((Content)FindControl("Content2")).FindControl("tx2")).Text; 

nadal nic

Odpowiedz

4

Przeczytałem kilka rzeczy tutaj: http://www.odetocode.com/Articles/450.aspx i okazało się, że zagnieżdżona strona w środku nigdy nie wzywa Page_Load! Zamiast tego, pożary zdarzenie obciążenia, które można złapać ustawić cokolwiek pola, więc odpowiedź była: na pod-stronie wykonaj następujące czynności:

protected override void OnLoad(EventArgs e) 
    { 
     myTextBox.Text = "anything"; 
     base.OnLoad(e); 
    } 
+0

Jeśli zagnieżdżona strona wzorcowa nie wywołuje Page_Load, coś jeszcze jest nie tak, ponieważ wszystkie metody Page_Load powinny zostać wywołane (na stronie głównej, zagnieżdżonej stronie wzorcowej i stronie treści). Dodałem trochę więcej informacji do mojej oryginalnej odpowiedzi. –

2

To powinno działać bez żadnych problemów, więc coś innego musi być nie tak. Właśnie wypróbowałem to w prostym projekcie testowym i nie mam problemów ze znalezieniem kontroli na stronie wzorcowej w obu przypadkach.

Sprawdziłbym (ponownie), jeśli odwołasz się do prawidłowej strony wzorcowej na zagnieżdżonej stronie wzorcowej. To, co można również sprawdzić, to typ środowiska wykonawczego właściwości Master wewnątrz zagnieżdżonej strony wzorcowej. Powinien to być typ twojej strony wzorcowej.

EDYTOWANIE: Myślałem, że problem polegał na znalezieniu kontroli na głównej stronie głównej z zagnieżdżonej strony wzorcowej, co powinno działać bez żadnych problemów. Aby znaleźć kontrolę wewnątrz symbolu zastępczego zawartości na zagnieżdżonej stronie wzorcowej, spójrz na następujące forum post.

+0

Właśnie stworzyłem nowy projekt od zera, wciąż otrzymuję takie same wyniki! nie mogę uzyskać dostępu do niczego na środkowej stronie zagnieżdżonej – Ayyash

+0

Myślałem, że twoje pytanie dotyczyło dostępu do właściwości na głównej stronie głównej zarówno na zagnieżdżonej stronie wzorcowej, jak i na stronie treści. Spróbuję przekonać się, czy mogę uruchomić nowy snenario: uzyskać dostęp do właściwości na zagnieżdżonej stronie wzorcowej ze strony zawartości. –

5
ContentPlaceHolder cp = (ContentPlaceHolder)this.Master.Master.FindControl("ContentPlaceHolder1"); 
    //base content place holder id 

Label objLabel3 = (Label)cp.FindControl("lblNested"); 
    //lblNested is id in nested master page 
0

Można mieć absolutną kontrolę nad zawartością zarówno mistrza stronę i zagnieżdżoną stronę ze strony treści za pomocą dyrektyw:

<%@ MasterType VirtualPath="your_master.master" %> 
<%@ Reference VirtualPath="~/your_master.master" %> 

Zobacz doskonały artykuł z K.Scott Allen w Ode To Code

Powiązane problemy