Почему переменная обнуляется после инициализации в Page_Init? - PullRequest
0 голосов
/ 21 августа 2009

Я определяю массив в классе, а не в каком-либо методе, как глобальную переменную в той же области действия метода:

TextBox[,] tx = new TextBox[100,100];
TableCell[,] tc = new TableCell[100, 100];
TableRow[] tr = new TableRow[100];

И я инициализирую их в событии Page_Init:

protected void Page_Init(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            //only for initiializing
            for (int i = 0; i < 100; i++)
            {
                tr[i] = new TableRow();
                for (int j = 0; j < 100; j++)
                {
                    tx[i, j] = new TextBox();
                    tc[i, j] = new TableCell();
                }
            }

        }

    }

но когда я нажимаю кнопку или любое событие обратной записи, переменные снова обнуляются! Что в этом плохого?

=============================================== ==========================

Это было решено с помощью Session для их хранения, но теперь чего-то не хватает. Как сохранить значения в текстовых полях в этот контейнер сеанса? И когда это сделать?

Ответы [ 4 ]

5 голосов
/ 21 августа 2009

Каждый раз, когда вы делаете какую-либо обратную передачу, даже если это просто обработка нажатия кнопки, вы работаете с совершенно новым экземпляром класса вашей страницы. Это ASP.Net 101.

Чтобы исправить это, снимите флажок if (!IsPostBack). Затем установите все их видимые свойства на False и сразу добавьте их на страницу. Когда вы узнаете, сколько вам нужно, установите для свойства Visible значение «true» для такого количества элементов управления.

Всегда есть два; Не больше, не меньше. Запрос и ответ.

2 голосов
/ 21 августа 2009

Это потому, что страница не имеет состояния. Вам необходимо сохранить данные на самой странице, то есть ViewState:

public TextBox[,] tx
{
   get { return ViewState["tx"] as TextBox[,]; }
   set { ViewState["tx"] = tx; }
}
2 голосов
/ 21 августа 2009

Экземпляр страницы, на котором размещены поля, работает как сервер и отбрасывается в конце запроса. В конце концов, веб-серверы, как правило, в основном не имеют состояния, что позволяет кластеризацию и т. Д.

Следующий запрос создаст новый экземпляр страницы (возможно, на другом компьютере, возможно, на новом AppDomain, если он был переработан).

Чтобы сохранить значения между запросами, вам нужно поместить их в сеанс и получить их обратно самостоятельно или отправить их клиенту в запросе (и вернуть их снова).

0 голосов
/ 21 августа 2009

Вы пытались добавить их в коллекцию Controls страницы или в коллекцию Control элемента управления на странице, такого как скрытая панель?

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