Переполнение стека при настройке свойств MasterPage - PullRequest
1 голос
/ 26 февраля 2009

Я получаю переполнение стека при попытке установить публичное свойство в MasterPage со страницы ASPX.

Я делаю редактор "поздравительных открыток", используя TabContainer. Каждая вкладка имеет пользовательский элемент управления, и все обновляется при изменении активной вкладки - при этом мне нужно сохранять все данные в свойствах главной страницы.

со страницы ASPX:

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

Из мастер-страницы:

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

И здесь я получаю переполнение стека; в наборе {}. Неважно, что я пытаюсь установить, я получаю одну и ту же проблему каждый раз. Я уверен, что упускаю какую-то незначительную вещь, но насколько я вижу, я следую всем примерам, которые я нашел.

Ответы [ 3 ]

8 голосов
/ 26 февраля 2009

Проблема в том, что свойство Message вызывает сам себя. Вам необходимо установить переменную-член или свойство элемента управления.

Редактировать : пример:

string mMessage = string.Empty;

public string Message
{
    get { return mMessage; }
    set { mMessage = value; }
}
1 голос
/ 26 февраля 2009

Кирон верен, ваше свойство по сути является бесконечным рекурсивным вызовом метода. Ваша собственность скомпилирована во что-то вроде этого:

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; }
0 голосов
/ 26 февраля 2009

Приятель, когда вы не используете автоматические свойства

public string Message{get;set;}

Вам нужна некоторая приватная переменная или переменная, в которой вы можете хранить значение свойства ... Обычно я делаю это:

private string _Message;

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

Simple? Да.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...