我遇到了完全相同的问题,并挣扎了 5-6 个小时。我发布这个也许像我这样的人可以得到帮助。
1) 您应该在 Page.PreInit 事件中初始化您的控件。(在我的情况下,我必须将控件添加到占位符,因此我扩展了 PreInit 以加载这些控件,但您不需要这样做。这取决于您的场景。)
2) 在您的 Page.PreInit 事件中初始化它们之后,您应该将这些确切的方法绑定到您的控件。
这是我的示例代码:
protected override void OnPreInit(EventArgs e)
{
// Loading controls...
this.PrepareChildControlsDuringPreInit();
// Getting ddl container from session and creating them...
if (GetDDLSession().Count != 0)
{
foreach (DropDownList ddl in GetDDLSession())
{
ddl.SelectedIndexChanged += SelectedIndexChanged;
phDropDowns.Controls.Add(ddl);
}
}
base.OnPreInit(e);
}
public static void PrepareChildControlsDuringPreInit(this Page page)
{
// Walk up the master page chain and tickle the getter on each one
MasterPage master = page.Master;
while (master != null) master = master.Master;
}