Я использую версию 2.7.5 (выпущена 11 января), так что это может быть немного новее.
Каждый виджет является пользовательским элементом управления и размещен в WidgetContainer.ascx.WidgetContainer предоставляет все общие функции, такие как переименование заголовка, позиционирование, развертывание / свертывание, редактирование и т. Д. Исходный файл находится в корневой папке «dropthings».Глядя на метод Init, мы видим, где экземпляр UserControl был создан и добавлен на страницу:
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
var widget = LoadControl(this.WidgetInstance.Widget.Url); //Here's the magic
widget.ID = "Widget" + this.WidgetInstance.Id.ToString();
WidgetBodyPanel.Controls.Add(widget);
_WidgetRef = widget as IWidget;
if (_WidgetRef != null) _WidgetRef.Init(this);
}
Итак, сначала WidgetContainer добавляется в дерево элементов управления для каждого настроенного виджета.Затем, когда каждый контейнер инициализируется, он создает, а затем добавляет определенный UserControl на страницу.Когда вызывается
WidgetBodyPanel.Controls.Add(widget);
, он инициализирует (OnInit) определенный виджет.Оттуда содержимое виджета находится в его собственных руках.