asp.net как я могу передать динамически сгенерированный объект в нединамический (указанный в пользовательском интерфейсе) пользовательский элемент управления до ввода страницы UserControls

#asp.net

#asp.net

Вопрос:

У меня есть пользовательский элемент управления, которому мне нужно передать объект до вызова OnInit пользовательского элемента управления, чтобы объект можно было использовать для создания содержимого пользовательского элемента управления до загрузки состояния представления.

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

Я пробовал много разных вещей, но вот наиболее очевидные способы, которые потерпели неудачу:

  1. В Page_Init() Страницы я создаю объект и передаю созданный пользовательский элемент управления, затем пытаюсь выполнить необходимую логику привязки содержимого UserControl для Page_InitComplete(). Это не удается, потому что пользовательский элемент управления, похоже, не вызывает Page_InitComplete, а Page_Init пользовательского элемента управления возникает до Page_Init страницы (так странно)
  2. Я попытался включить логику привязки UserControl в вызов Page_Load (), который выполняется после Page_Init () Страницы. Однако это слишком поздно, и ViewState уже не удалось заполнить заранее, потому что не существует надлежащей привязки данных.
  3. Я попытался заполнить свойство объекта UserControl в Page_PreInit. Однако пользовательский элемент управления еще не создан, поэтому ссылка на пользовательский элемент управления на странице равна нулю.

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

Поскольку это сложный объект, я уверен, что не смогу передать его в пользовательский элемент управления пользовательского интерфейса, например lt;UC:CustomUC propertyName=новый комплексный объект()gt;

Чего мне не хватает.

Ответ №1:

Главное, чего мне не хватало, — это то, что основная цель Page_Init() заключается в (повторной)генерации ДИНАМИЧЕСКИ СОЗДАВАЕМЫХ ЭЛЕМЕНТОВ УПРАВЛЕНИЯ. Поскольку мои элементы управления не создавались динамически, мне не нужно было полагаться на Page_Init.

Таким образом, все элементы управления хранятся в viewstate, поэтому мне не нужно было повторно заполнять его, что меня беспокоило. ТАК что этот пост-больше возможность для обучения для меня, чем для кого-либо другого.