На самом деле, чтобы ответить на ваш вопрос, так же, как все остальные, кажется, не хотят, чтобы вы это делали, и я согласен ... Я уже делал подобные вещи раньше.
Первое, что я хотел бы сделать, это заставить вашу страницу реализовать интерфейс.
В контроле:
IVansFannelDataProviderPage provider = this.Page as IVansFannelDataProviderPage;
if (provider != null) { //grab data from interface } else throw YouCantPutThisControlOnThisKindOfPageException();
Это не самый элегантный способ сделать это, но когда у нас было много элементов управления, желающих поделиться очень дорогим объектом, это отвечало всем требованиям.
Это работает хорошо, но делает ваш элемент управления непригодным для использования на страницах, которые не реализуют интерфейс - и это делает элементы управления слишком тесно связанными с вашей страницей. Все остальные, которые говорят, что страница получает данные от элементов управления, верны; Вы размещаете элементы управления на странице, а не страницы в элементах управления.
У вас должна быть очень веская причина, чтобы сделать это. Для нас: загрузка общего объекта была очень дорогой, и загрузка / сохранение страницы независимо от того, какой элемент управления работал над этим объектом, была весьма полезной.
Было очень плохо, что многие страницы, которые на самом деле не реализовывали интерфейс, должны были быть включены для того, чтобы обеспечить какую-то поддержку или поддержку прокси, чтобы заставить работать элементы управления, и сделать страницы и элементы управления намного меньше многоразовые.
Если бы мне пришлось сделать это снова, я бы заставил страницу отправить данные в элементы управления с событиями, возможно, через отражение, если бы мне нужно было лениться.