2009-02-26 6 views
1

Ich erhalte einen Stapelüberlauf, wenn versucht wird, eine öffentliche Eigenschaft in einer MasterPage von einer ASPX-Seite aus festzulegen.Stapelüberlauf beim Festlegen der MasterPage-Eigenschaften

Ich mache einen "Grußkarten" -Editor mit einem TabContainer. Jede Registerkarte verfügt über ein Benutzersteuerelement und alles wird aktualisiert, wenn die aktive Registerkarte geändert wird. Dabei muss ich alle Daten in den Eigenschaften der Masterseiten speichern.

Von der ASPX-Seite:

protected void tcTabs_ActiveTabChanged(object sender, EventArgs e) 
{ 
    Master.Message = "blahblah"; 
} 

Von der Masterpage:

public string Message 
{ 
    get { return Message; } 
    set { Message = value; } 
} 

Und das ist, wo ich einen Stapelüberlauf zu bekommen; in der Menge {}. Ist es egal, was ich versuche zu setzen, bekomme ich jedes Mal das gleiche Problem. Ich bin mir sicher, dass mir etwas Kleines fehlt, aber soweit ich sehen kann, befolge ich alle Beispiele, die ich gefunden habe.

Antwort

8

Das Problem besteht darin, dass die Message-Eigenschaft sich selbst aufruft. Sie müssen eine Elementvariable oder Steuerelementeigenschaft festlegen.

bearbeiten: Beispiel:

string mMessage = string.Empty; 

public string Message 
{ 
    get { return mMessage; } 
    set { mMessage = value; } 
} 
+0

+1, oder verwenden Sie, wenn möglich, eine Auto-Eigenschaft (C#> = 3.0): public string Message {get; einstellen; } – ybo

+0

Ja, guter Punkt. – Kieron

+0

Danke, ich wusste, dass es eine Art von Fehler n00b war. –

1

Kieron korrekt ist, Ihr Eigentum im Wesentlichen unendlich rekursive Methodenaufruf ist. Ihre Eigenschaft wird in etwa folgendermaßen kompiliert:

public string get_Message() { return get_Message(); } 
public void set_Message(string value) { set_Message(value); } 

Das ist offensichtlich nicht korrekt. Sie benötigen ein Trägerfeld:

private string message; 
public string Message { get { return this.message; } set { this.message = value; } } 

Oder wenn Sie mit C# arbeiten 3, nur Nachricht definieren, wie so:

public string Message { get; set; } 
+0

+1 für eine gute Erklärung. –

0

Buddy, wann immer Sie nicht automatisch Eigenschaften

public string Message{get;set;} 
mit

Sie müssen eine private Variable oder eine Variable haben, wo Sie den Wert der Eigenschaft speichern können ... Normalerweise mache ich das:

private string _Message; 

public string Message 
{ 
get{return _Message;} 
set{_Message = value;} 
} 

Einfach? Ja.