【问题标题】:Asp.NET server control events not firingAsp.NET 服务器控件事件未触发
【发布时间】:2014-03-11 21:11:36
【问题描述】:

感谢所有阅读的人。我有一个代码问题,在 stackoverflow 上已多次讨论过,但我无法使提供的解决方案发挥作用。

这是关于包含其他控件的服务器控件,我无法触发它们的事件。

我的问题很简单,我需要在我的服务器控件中添加任何数字 ok LinButton。这是我的代码:

protected override void CreateChildControls()
{
    for (int i = 0; i < IndiceValue; i++)
    {
        LinkButton imageTemp = new LinkButton() { CommandName = String.Format("{1}_{0}", CommandNames, i), Text = i.ToString(), ID = Guid.NewGuid().ToString()};
        imageTemp.Click += ImageTempOnClick;
        this.Controls.Add(imageTemp);
    }
    base.CreateChildControls();
}

我的控件中有一个自定义事件:

public delegate void IndiceFiabiliteCommand(object sender, IndiceFiabiliteCommandEventArg e);
public event IndiceFiabiliteCommand Command;

从理论上讲,当单击任何 LinkBut​​ton 时,我希望用户收到任何 LinkBut​​ton 已被单击的警告。我给了他所有需要的信息,但我不认为这部分是问题。

最后要知道的是,我实现了 INamingContainer,我尝试同时实现 IPostBackDataHandler 和 IPostBackEventHandler,但没有成功。

希望大家可以理解

谢谢!

【问题讨论】:

    标签: c# asp.net custom-server-controls


    【解决方案1】:

    问题是ID = Guid.NewGuid().ToString()

    您不能使用动态 ID 动态创建控件。把代码改成

    ... i.ToString(), ID = i.ToString()

    基本上,动态控件的 ID 必须与最初创建的 ID 相同。

    否则每次回发时都会创建新的控件,并且找不到导致回发的控件。

    仅供参考:如果您需要捕捉事件,我建议您使用已经有 INamingContainer 的 CompositeControl

    注意:这正是我根据您的代码找到的;也可能是其他问题。

    【讨论】:

    • 它有效!谢谢,我删除了 ID,INamingContainer 完成了这项工作。
    猜你喜欢
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    相关资源
    最近更新 更多