2013-03-22 17 views
34

Mam stronę wzorcową, która zawiera etykietę komunikatów o stanie. Muszę ustawić tekst statusu na różnych stronach .aspx. Jak można to zrobić ze strony treści?sposób uzyskiwania dostępu do strony wzorcowej ze strony zawartości

public partial class Site : System.Web.UI.MasterPage 
{ 
    public string StatusNachricht 
    { 
     get 
     { 
      return lblStatus.Text; 
     } 
     set 
     { 
      lblStatus.Text = value; 
     } 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    {    

    } 
} 

Próbowałem, ale nie udało się co działa:

public partial class DatenAendern : System.Web.UI.Page 
{ 
    var master = Master as Site; 

    protected void Page_Load(object sender, EventArgs e) 
    {    
     if (master != null) 
     { 
      master.setStatusLabel(""); 
     } 
    }   

    protected void grdBenutzer_RowCommand(object sender, GridViewCommandEventArgs e) 
    {   
      try 
      { 
       //some code 

       if (master != null) 
       { 
        master.setStatusLabel("Passwort erfolgreich geändert."); 
       } 
      } 
      catch (Exception ex) 
      { 
       if (master != null) 
       { 
        master.setStatusLabel("Passwort konnte nicht geändert werden!"); 
       }          
      } 
     } 
    }     
} 
+0

więc chcesz uzyskać dostęp do "właściwości tekstu etykiety" na wszystkich stronach 'aspx' .... prawda? –

+0

tak, to jest zasadniczo to, co próbuję osiągnąć ... – LeonidasFett

+1

@LeonidasFett: Powinien działać, więc jaki masz problem? Czy używałeś debuggera? –

Odpowiedz

60

W MasterPage.cs złożyć dodać property z Label tak:

public string ErrorMessage 
{ 
    get 
    { 
     return lblMessage.Text; 
    } 
    set 
    { 
     lblMessage.Text = value; 
    } 
} 

Na własną aspx na stronie, tuż pod dyrektywą Page dodaj to:

<%@ Page Title="" Language="C#" MasterPageFile="Master Path Name"..... %> 
<%@ MasterType VirtualPath="Master Path Name" %> // Add this 

I w twojej codebehind(aspx.cs) stronę można następnie łatwo uzyskać dostęp do Label Property i ustawić jej text w razie potrzeby. Tak:

this.Master.ErrorMessage = "Your Error Message here"; 
+1

dziękuję, że działa idealnie i bardzo wygodne! – LeonidasFett

+1

zmienić tytuł tego pytania na bardziej odpowiedni. "jak uzyskać dostęp do strony wzorcowej ze strony zawartości" –

+1

ok teraz otrzymałem wyjątek NullReferenceException dla etykiety w polu właściwości ... Przesłałem mój nowy kod powyżej. czy coś tu przegapiłem? – LeonidasFett

3

You cannot use var in a field, tylko od zmiennych lokalnych.

Ale nawet to nie będzie działać:

Site master = Master as Site; 

Ponieważ nie można używać this w polu i Master as Site jest taka sama jak this.Master as Site. Więc po prostu zainicjować pole z Page_Init gdy strona jest w pełni zainicjowany i można korzystać this:

Site master = null; 

protected void Page_Init(object sender, EventArgs e) 
{    
    master = this.Master as Site; 
} 
21

na stronie partnerskiej można uzyskać dostęp do etykiety i ustawić tekst taki jak

Oto lblStatus 'jest twoim panem strona etykieta ID

 
Label lblMasterStatus = (Label)Master.FindControl("lblStatus"); 

lblMasterStatus.Text = "Meaasage from content page"; 
+0

A jeśli mistrz ma mastera, musisz "Master.Master". – toddmo

3

mam pomocnika Metoda dla tego w moim System.Web.UI.Page klasa

protected T FindControlFromMaster<T>(string name) where T : Control 
{ 
    MasterPage master = this.Master; 
    while (master != null) 
    { 
     T control = master.FindControl(name) as T; 
     if (control != null) 
      return control; 

     master = master.Master; 
    } 
    return null; 
} 

następnie można uzyskać dostęp za pomocą poniższego kodu.

Label lblStatus = FindControlFromMaster<Label>("lblStatus"); 
if(lblStatus!=null) 
    lblStatus.Text = "something"; 
+0

TAnx alot, drodzy @surya –

5

To Działa

Aby znaleźć kontrole strony wzorcowej na stronie Child

Label lbl_UserName = this.Master.FindControl("lbl_UserName") as Label;      
lbl_UserName.Text = txtUsr.Text; 
1

ta jest bardziej skomplikowana, jeśli masz zagnieżdżonego MasterPage. Najpierw musisz znaleźć kontrolę treści zawierającą zagnieżdżoną stronę wzorcową, a następnie znaleźć na niej kontrolę na zagnieżdżonej stronie wzorcowej.

Klucz decydujący: Master.Master.

Zobacz tutaj: http://forums.asp.net/t/1059255.aspx?Nested+master+pages+and+Master+FindControl

Przykład:

„Znajdź kontrolę zawartości

Dim ct Jak ContentPlaceHolder = Me.Master.Master.FindControl ("cphMain")

'teraz znajduj kontrole wewnątrz tej zawartości

Dim lbtn Zapisz jako LinkButton = ct. FindControl ("lbtnSave")

+1

Aha! Zagnieżdżona strona wzorcowa była moim problemem i to się udało! – madannes

Powiązane problemy