2009-07-07 22 views

Odpowiedz

18

Najprostszym sposobem jest ustawienie właściwości na stronie wzorcowej, która obsługuje funkcję włączania/wyłączania jak się nazywa. Następnie na stronie podrzędnej ustaw MasterType directive, aby uzyskać silnie typowane odwołanie do strony wzorcowej w celu ominięcia konieczności rzutowania.

Twoja strona dziecko musiałoby:

<%@ MasterType VirtualPath="~/Site1.Master" %> 

I zadzwonić własność strony wzorcowej:

Master.MyLabel = false; // or true 

Więc na swojego mistrza Mogłeś:

public bool MyLabel 
{ 
    get 
    { 
     return masterLabel.Enabled; 
    } 
    set 
    { 
     masterLabel.Enabled = value; 
    } 
} 
+0

Marks anser kazał mi to kontynuować, ale to jest odpowiedź, w jaki sposób udało mi się go wdrożyć. Dzięki Ahmad. – Lloyd

+0

Niezły. Jedną rzeczą, którą możesz zrobić, to przejść do pliku .designer.cs i zmienić zakres kontrolki tam na publiczny, a następnie masz wszystkie właściwości do przekazania logiki strony. Również jeśli wystawiasz publiczną własność, zwykle najlepiej jest używać CamelCase, pascalCase jest dla prywatnych pól. :) –

+0

@ Mark: dobra informacja! Zgadzam się z CamelCase, tęskniłem za tym. Naprawiono teraz. –

3

Oto przykład komunikacji ze stronami wzorcowymi na stronach podrzędnych.

Na stronie głównej, utworzyć właściwość do kontroli którego chcesz uzyskać dostęp, powiedzmy etykieta nazywany lblUser ...

public string MyProperty 
     { 
     set { lblUser.Text = value; } 
     } 

Na stronie dzieci, dostęp do właśnie utworzonego jak w nieruchomości następujący przykład ...

((MyMaster)this.Master).MyProperty = "Text changed from Sub Page"; 

Jesteśmy w stanie to zrobić, ponieważ Mistrz jest po prostu klasą, która dziedziczy System.Web.UI.MasterPage.

Własność Label.Text, którą utworzyliśmy, jest po prostu własnością klasy Master (ta nazwa będzie specyficzną nazwą aktualnej strony wzorcowej, w tym przypadku MyMaster).

Zauważ, że nie będzie działało bez rzutowania na określoną klasę strony głównej, a to dlatego, że dodałeś pole, które nie istnieje w System.Web.UI.MasterPage, typ this.Master, ale w twoim konkretna klasa Master.

+0

+1 do tego! Tak samo jak moje rozwiązanie, tylko bardziej eleganckie! – GenericTypeTea

+0

Prosty i użyteczny. Dzięki i zasłużyłem na jeden punkt. – QMaster

-1
this.Master.FindControl("controlid").dosomethinghere 
+1

-1 nazwy kontroli kodowania twardego jako ciągi są ZŁE – GenericTypeTea

+0

@GenericTypeTea To, co robią w [dokumentacji] (https://msdn.microsoft.com/en-us/library/xxwa0ff0 (v = vs.140) .aspx) chociaż – Zorgarath

10

Trzeba użyć dyrektywy MasterType w widoku znaczników

<%@ MasterType TypeName="Namespace.Etc.MyMasterPage" %> 

Wtedy będzie można uzyskać dostępu do żadnych właściwości publiczne strony wzorcowej strony Korzystanie

this.Master.PropertyIWantToIntefereWith... 

nadzieję, że ten pomaga

+0

robiłem to poprzez rzutowanie obiektu strony ... to brzmi SOOO znacznie lepiej! Dzięki! – CodeRedick

+0

Nie było dla mnie jasne, gdzie określić wartość TypeName, więc użyłem opcji VirtualPath dla MasterType i działało świetnie. Dzięki! – Lloyd

+0

Nigdy nie nowość! Dzięki Mark +1! – GenericTypeTea

0

I szukałem czegoś podobnego, ale to rozwiązanie nie działa dla mnie. Mam zagnieżdżoną stronę wzorcową. Czy to działa dla zagnieżdżonego mistrza? Kiedy zaimplementowałem, nie rozpoznaję kontroli, którą dodałem do mojego wzorca.

Powiązane problemy