单击事件未在动态添加的LinkBut​​ton上触发

时间:2013-07-11 13:47:38

标签: c# asp.net .net

我在LinkButton中动态创建Load,然后将其添加到Master页面上的控件中。以下是用于创建LinkButton的原始代码:

LockUnlock = new LinkButton() { ID = "LockUnlock", Visible = false };
LockUnlock.Click += LockUnlock_Click;

现在,当我第一次研究这个问题时,我认为它可能与ASP.NET生命周期有关,所以我将代码移到了override OnInit,但是没有修复它。

然后我继续设置ID,因为那还没有完成。所以我添加了这一行:

LockUnlock.ID = "LockUnlock";

我在OnInitLoad都试过了 - 没有运气。

然后我想,因为我将它添加到实际上是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是上述行传递给方法的内容。

1 个答案:

答案 0 :(得分:2)

它必须在init中。此外,在添加事件之前,尝试将控件添加到控件的集合中,如:

LockUnlock = new LinkButton() { ID = "LockUnlock", Visible = false };
Panel.Controls.Add(LockUnlock);
LockUnlock.Click += LockUnlock_Click;