Что делать, если вы хотите, чтобы обмен данными с веб-частью происходил до Page_Load?

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

Итак, в основном я хочу, чтобы веб-части могли общаться до Page_Load.

[ConnectionConsumer("FormRID Consumer","FormRIDConsumer")]
public void InitializeProvider(MyControl.IFormRID provider)
{
    theProvider = provider;
    FormRID = theProvider.FormRID;
}

Этот метод вызывается только после Page_Load. Это большая проблема для меня, потому что мои потребители Page_Load зависят от установленного и точного FormRID. Я не могу переместить свой код Page_Load в Page_LoadComplete, потому что мне нужно создавать динамические элементы управления с помощью viewstate (viewstate не восстанавливается после Page_Load)

Есть ли какая-то работа, которую я могу использовать, чтобы общаться до Page_Load.


person Earlz    schedule 22.10.2009    source источник


Ответы (3)


Вы пробовали подписаться на событие Init зоны веб-частей и разместить там свой InitializeProvider ()? Я считаю, что он запускается перед событиями OnLoad или OnInit пользовательских элементов управления и веб-форм.

person TSmith    schedule 22.10.2009
comment
Может быть, вы могли бы дать немного дополнительной информации? Я все еще новичок в веб-частях. Как бы вы инициализировали связь вручную через Page_Init в коде страницы менеджера веб-частей? - person Earlz; 22.10.2009
comment
Нет, не инициализация страницы или элемента управления, а объект-контейнер WebPartZone имеет события Init и Load. Init будет запускаться перед классом страницы или классом управления Init. Однако я не уверен, что элемент управления, вложенный в WebPartZone, будет в это время в допустимом состоянии. В VS Designer, если вы щелкните зону веб-части, в которой находится ваш элемент управления, а затем перейдете в «Свойства» и переключитесь на представление «Событие» (световой индикатор), вы увидите событие. - person TSmith; 22.10.2009
comment
Обработчик события Init будет добавлен в класс страницы с выделенным кодом, но он не связан с Page_Init страницы. Надеюсь, что это поможет ... должно выглядеть примерно так: protected void WebPartZone1_Init (object sender, EventArgs e) {} - person TSmith; 22.10.2009
comment
согласно msdn.microsoft.com/en-us/library/ms366536.aspx так что было бы чистым хакерством получать соединения перед загрузкой, поэтому я думаю, что я просто использую свой собственный метод связи - person Earlz; 22.10.2009
comment
Возможно, вы сможете использовать ConnectionZone. msdn.microsoft.com/en- us / library / - person TSmith; 22.10.2009

Вы должны использовать событие OnPreRender вместо Load, потому что onLoad происходит до выполнения соединения WebPart.

Вот один из примеров того, чего можно ожидать при использовании событий OnLoad и OnPreRender http://blog.mastykarz.nl/web-part-requires-clicking-twice-apply-ok-button-apply-changes/

person Juan C    schedule 03.01.2012

В итоге мне пришлось создать собственное общение в веб-части.

В итоге он стал намного чище, чем ASP.Net, и общение может происходить уже через OnInit внутри веб-частей.

person Earlz    schedule 30.11.2009