设置MasterPage属性时堆栈溢出

时间:2009-02-26 11:02:15

标签: .net asp.net user-controls master-pages

尝试从ASPX页面设置MasterPage中的公共属性时,我遇到堆栈溢出。

我正在使用TabContainer创建一个“贺卡”编辑器。每个选项卡都有一个用户控件,当活动选项卡更改时,所有内容都会更新 - 这样做我需要将所有数据存储在母版页属性中。

从ASPX页面:

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

来自MasterPage:

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

这就是我得到堆栈溢出的地方;在集{}中。我尝试设置的并不重要,每次都会遇到同样的问题。我确定我错过了一些小事,但据我所知,我正在遵循我找到的所有例子。

3 个答案:

答案 0 :(得分:8)

问题是Message属性正在调用自身。您需要设置成员变量或控件属性。

修改:示例:

string mMessage = string.Empty;

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

答案 1 :(得分:1)

Kieron是正确的,你的属性本质上是一个无限的递归方法调用。你的财产被编译成这样的东西:

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

这显然不正确。你需要一个支持领域:

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

或者如果你正在使用C#3,只需像这样定义Message:

public string Message { get; set; }

答案 2 :(得分:0)

Buddy,每当你不使用自动属性时

public string Message{get;set;}

你需要有一些私有变量或一些变量,你可以存储属性的值...通常我这样做:

private string _Message;

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

简单?是。