Как получить доступ к представлению программно добавленного UserControl во время инициализации страницы? - PullRequest
3 голосов
/ 03 февраля 2012

У меня есть набор программно добавленных пользовательских элементов управления на странице (они создаются и добавляются во время события Init главной страницы).Каждый из этих элементов управления программно добавляет кнопки во время своего собственного события Init.
(так что это «два уровня» динамически создаваемых элементов управления. Не знаю, имеет ли это значение.)

Но Мне нужно получить доступ к состоянию просмотра при создании этих кнопок (я использую состояние просмотра для запоминания пользовательских данных).

protected void Page_Init(object sender, EventArgs e)
{
    // I need my ViewState right now !
    Button myButton = new Button();
    myButton.Text = "Click me";
    myButton.Command += new CommandEventHandler(myCommandHandler);
    myButton.CommandName = "Delete";
    myButton.ID = "myButtonID";
    myPlaceholder.Controls.Add(myButton);
}

Я понял, что состояние просмотра недоступно во время события Init.Но кнопки не запускают свои события (OnClick и т. Д.), Если они создаются после инициализации.

  • Как создавать динамические элементы управления и одновременно получают доступ к состоянию просмотра?

1 Ответ

1 голос
/ 03 февраля 2012

Не думаю, что ты можешь. Не идеально, но я бы поставил пользовательские данные в Session в этом случае. С динамическими элементами управления сложно работать, и я думаю, что это один из компромиссов. ViewState загружается после Page_Init - это сообщение на форуме подтверждает

Другим вариантом может быть сохранение информации в ваших собственных скрытых полях. Они станут доступны в коллекции Request.Form во время обратной передачи и будут доступны. Конечно, если вы сделаете их runat="server" (что вам, вероятно, придется), фреймворк добавит к названию все идентификаторы контейнеров именования, поэтому вам придется быть немного умнее при их копании. Это будет немного хакерским, хотя, так что я буду склонен придерживаться Сессии

Кто-то, конечно, может знать другое.

...