我开始查看 dropthings 门户,但我不明白小部件中的内容是如何加载的。我的理解是标题位于 Updatepanel 中,而小部件的主体位于 UpdatePanel 中,其中包含 ASP 面板。当页面加载时,首先加载所有小部件的 ASP 面板,然后再加载面板中的用户控件。
有人可以解释这是怎么发生的,并指出设置的代码吗?
任何帮助表示赞赏
我开始查看 dropthings 门户,但我不明白小部件中的内容是如何加载的。我的理解是标题位于 Updatepanel 中,而小部件的主体位于 UpdatePanel 中,其中包含 ASP 面板。当页面加载时,首先加载所有小部件的 ASP 面板,然后再加载面板中的用户控件。
有人可以解释这是怎么发生的,并指出设置的代码吗?
任何帮助表示赞赏
我使用的是 2.7.5 版(1 月 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 添加到配置的每个 Widget 的控制树中。然后在初始化每个容器时,它会创建特定的 UserControl,然后将其添加到页面中。什么时候
WidgetBodyPanel.Controls.Add(widget);
被调用时,它将初始化(OnInit)特定的小部件。从那里,小部件的内容掌握在自己手中。