我在LinkButton
中动态创建Load
,然后将其添加到Master
页面上的控件中。以下是用于创建LinkButton
的原始代码:
LockUnlock = new LinkButton() { ID = "LockUnlock", Visible = false };
LockUnlock.Click += LockUnlock_Click;
现在,当我第一次研究这个问题时,我认为它可能与ASP.NET生命周期有关,所以我将代码移到了override OnInit
,但是没有修复它。
然后我继续设置ID
,因为那还没有完成。所以我添加了这一行:
LockUnlock.ID = "LockUnlock";
我在OnInit
和Load
都试过了 - 没有运气。
然后我想,因为我将它添加到实际上是ContentPlaceHolder
的一部分的自定义控件中我可能需要使ID
静态才能使其工作,所以我添加了这个:
LockUnlock.ClientIDMode = ClientIDMode.Static;
我只在Load
尝试过,但没有运气,说实话,如果它不在Load
中工作,那几乎肯定不会改变OnInit
中的任何内容 - 这只是我的第一步,在很多方面真的是一个欢呼玛丽。
好吧,所以现在我觉得这与ResourceCenter
是一个自定义控件的事实相关,这个控件被添加到ContentPlaceHolder
因此事件,尽管它是由于class
的上下文,技术上挂钩,无法解雇。但是我不确定从这里开始。
我是否需要为点击添加共享类?我是否需要将自定义控件中的单击连接起来,然后以某种方式从那里委托它?
我更喜欢 而不是使用其中任何一种解决方案,但是,嘿,我们做我们必须做的事情!我期待着每个人对此的投入。
将控件添加到ResourceCenter
的代码如下所示:
this.ResourceCenter.AddAdminLink(LockUnlock.Visible ? LockUnlock : null);
并且ResourceCenter
控件中添加到其列表中的代码如下所示:
if (link == null) { return; }
var wrapper = new HtmlGenericControl("li");
wrapper.Controls.Add(link);
this.AdminLinkList.Controls.Add(wrapper);
其中link
是上述行传递给方法的内容。
答案 0 :(得分:2)
它必须在init中。此外,在添加事件之前,尝试将控件添加到控件的集合中,如:
LockUnlock = new LinkButton() { ID = "LockUnlock", Visible = false };
Panel.Controls.Add(LockUnlock);
LockUnlock.Click += LockUnlock_Click;