Page_Init PreRender Controls, Asp.net - PullRequest
0 голосов
/ 24 мая 2011

Добрый день.

У меня есть список панелей, которые динамически создаются в Page_Load. Элементы управления добавляются через Control.Add (p); метод. Код следует

Panel p = new Panel();
p.ID = "cell_" + i + "_" + j;
p.Attributes.Add("runat", "server");
p.TabIndex = -1;
p.Attributes.Add("class", "box");
p.Attributes.Add("onClick", "clicked(this);");
p.Attributes.Add("onKeypress", "changeValue(event, this);");
p.Style.Add(HtmlTextWriterStyle.Top, top + "%");
p.Style.Add(HtmlTextWriterStyle.Left, left + "%");
p.Attributes.Add("Text", value);

PanelList.Add(p);

этот блок кода находится в цикле for, а переменные i, j, left, right и value изменяются в каждом цикле.

Теперь, когда я вызываю эту функцию ДО завершения Page_Load:

foreach (Control c in clientGrid.Controls)
{
    Response.Write(c.ClientID.ToString());
}

Он успешно записывает все идентификаторы клиентов всех динамически создаваемых панелей.

Однако, когда я запускаю функцию foreach при обратной передаче, Response.write ничего не отображает. Как будто жерех забыл, что эти панели существуют!

Теперь я слышу, что в Page_Init () элементы управления должны быть перерисованы!

Я не уверен, Как это сделать, и после многих поисков Google, кажется, не может найти ответ.

Я пытался использовать рекурсию, чтобы перебрать все Page.Controls и вытащить

System.Web.UI.WebControls.Panel

Но все равно не повезло: (

Если мой вопрос неясен, я не могу предоставить больше кода и деталей:)

Thankyou

Alex

1 Ответ

1 голос
/ 24 мая 2011

Динамически добавленные элементы управления должны повторно добавляться на страницу при каждой обратной передаче. Я не знаю, будет ли это соответствовать вашим логическим требованиям, но убедитесь, что вы добавляете свои элементы управления в метод page_load вне вашего условия (! IsPostback). Затем убедитесь, что ваша логика для записи идентификаторов клиента вызывается после добавления элементов управления на страницу.

Если вам нужно хранить информацию о состоянии этих элементов управления между постбэками, вам, вероятно, придется использовать некоторые javascript и hiddenfields.

Все ваши обработчики событий должны вызываться после Page_Load, поэтому, если вы добавите элементы управления в Page_Load, все будет в порядке. OnPreRender иногда полезен для такого рода вещей. Он вызывается после Page_Load, но до окончания отправки сообщения.

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