2013-03-22 7 views
34

Ich habe eine Masterseite, die eine Beschriftung für Statusmeldungen enthält. Ich muss den Statustext von verschiedenen ASPX-Seiten festlegen. Wie kann dies von der Inhaltsseite aus getan werden?wie Zugriff auf Masterseite Steuerelement von Inhalt Seite

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) 
    {    

    } 
} 

Ich habe dies versucht, aber war nicht erfolgreich bei der Herstellung es:

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

Also wollen Sie auf all Ihre 'aspx' Seiten auf die 'text'-Eigenschaft des Labels zugreifen ... oder? –

+0

ja das ist im Grunde, was ich versuche zu erreichen ... – LeonidasFett

+1

@LeonidasFett: Sollte funktionieren, also welches Problem haben Sie? Hast du den Debugger benutzt? –

Antwort

60

In den MasterPage.cs Datei hinzufügen die property von Label wie folgt aus:

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

Auf Ihrem aspx Seite, direkt unter der Seiten-Richtlinie fügen Sie folgendes hinzu:

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

Und in Ihrem codebehind(aspx.cs) Seite können Sie dann einfach auf die Label Property zugreifen und text wie erforderlich einstellen. Wie folgt aus:

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

danke das funktioniert perfekt und sehr praktisch! – LeonidasFett

+1

Ändern Sie den Titel dieser Frage in relevantere. 'Wie man auf Masterseitensteuerung von der Inhaltsseite aus zugreift' –

+1

ok jetzt erhalte ich eine NullReferenceException für das Label im Eigenschaftsfeld ... Ich habe meinen neuen Code oben hochgeladen. Habe ich hier etwas vermisst? – LeonidasFett

3

Sie cannot use var in a field, nur auf lokale Variablen.

Aber auch das wird nicht funktionieren:

Site master = Master as Site; 

Weil Sie nicht this in einem Feld verwenden können, und Master as Site ist die gleiche wie this.Master as Site. So initialisieren Sie das Feld von Page_Init, wenn die Seite vollständig initialisiert ist, und Sie können verwenden this:

Site master = null; 

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

In Inhaltsseite Sie das Etikett zugreifen können und stellen Sie den Text wie

Hier lblStatus 'ist der Masterseite Label ID

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

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

Und wenn der Master einen Master hat, müssen Sie 'Master.Master'. – toddmo

3

Ich habe einen Helfer Methode dafür in meiner System.Web.UI.Page Klasse

dann können Sie unter Verwendung von unten Code zugreifen.

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

TAnx viel, lieber @surya –

5

es funktioniert

Um Masterseite Kontrollen auf Kinder Seite

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

Dies ist komplizierter, wenn Sie eine verschachtelte Master haben. Sie müssen zuerst das Inhaltssteuerelement finden, das die verschachtelte MasterPage enthält, und dann das Steuerelement auf Ihrer verschachtelten MasterPage finden.

Entscheidendes Bit: Master.Master.

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

Beispiel:

‚, um den Steuerinhalt finden

Dim ct Als Content = Me.Master.Master.FindControl ("cphMain")

'Jetzt finden Sie Kontrollen in diesem Inhalt

Dim lbtnSave Als LinkButton = ct. FindControl ("lbtnSave")

+1

Aha! Die geschachtelte Masterseite war mein Problem und das hat den Trick gemacht! – madannes

Verwandte Themen