Asp.Net: проблема установки значения свойства в UserControl - PullRequest
0 голосов
/ 18 декабря 2009

У меня есть UserControl под названием «Вдохновение» со следующим открытым свойством

private int pagenumber;
public int PageNumber
{

    get { return pagenumber; }
    set { pagenumber = value; }

}

На своей странице aspx я установил значение свойства следующим образом:

Inspirations.PageNumber = (int)Convert.ToInt32(this.txtNum.Text);

На моей странице aspx я записываю обратно значение, чтобы проверить, установлено ли оно:

Response.Write(Inspirations.PageNumber.ToString());

... и это на моей странице aspx.

Однако у меня в UserControl есть кнопка для проверки значения PageNumber, и когда я нажимаю, оно всегда возвращается как ноль.

protected void btnAddCompany_Click(object sender, EventArgs e)
{
    Response.Write(PageNumber.ToString());
}

... значение свойства, похоже, не передано моему контролю.

Может кто-нибудь сказать мне, что я делаю неправильно, пожалуйста.

С уважением Растопить

Ответы [ 3 ]

2 голосов
/ 18 декабря 2009

Вам необходимо сохранить значение в ViewState или SessionState:

например:

public int PageNumber
        {
            get
            {
                if (ViewState["PageNumber"] == null || ViewState["PageNumber"].ToString().Trim() == String.Empty)
                {
                    ViewState["PageNumber"] = 0;
                }
                return Int32.Parse(ViewState["PageNumber"].ToString().Trim());
            }
            set
            {
                ViewState["PageNumber"] = value;
            }
        }
0 голосов
/ 18 декабря 2009

Последовательность событий / фаз на странице aspx включает следующее (это неполный список):

  1. OnInit (сначала управление, затем страница)
  2. OnLoad (сначала страница, затем элементы управления)
  3. Контроль событий (например, нажатие кнопки)
  4. PreRender
  5. Рендер

Любой код, который вы имеете на стороне разметки, вызывается во время фазы рендеринга.

В общем, вызов Response.Write() небезопасен, кроме как во время рендеринга. Если вы вызываете его раньше, любой вывод будет отображаться перед всей вашей разметкой.

Итак, ответ на ваш вопрос: во-первых, все это должно происходить во время одного и того же запроса, поскольку простое хранение открытого свойства не сохранит ценность для разных запросов. Затем убедитесь, что вы установили свойство в начале жизненного цикла (обычно OnLoad). Далее, не используйте Response.Write() для вывода результатов. Установите значение элемента управления <asp:Label> или что-то в этом роде.

0 голосов
/ 18 декабря 2009

Нажатие вашей кнопки будет осуществляться с помощью обратной передачи, что означает, что все еще будут вызываться другие методы (например, OnInit (), OnLoad ()) в жизненном цикле страницы ASP.NET.

Если вы зададите PageNumber в одном из них, он уничтожит значение, установленное в браузере, прежде чем попадет в ваш обработчик нажатий кнопок.

Проверьте свойство IsPostBack перед установкой значения свойства / поля, чтобы предотвратить это.

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