模板控件内的按钮:事件未激发



我有一个模板化控件,在从中激发事件时遇到问题。

我的实际控制有更多的模板,也有点复杂,但它的本质就这么简单:

<MyControl>
    <SomeTemplate>
        <%# Container.Blabla %>
        <asp:Button runat="server" id="someButton" OnClick="ClickAction" />
    </SomeTemplate>
</MyControl>

看起来一切都很好,但点击其中的按钮不会触发事件处理程序(它位于我的页面codeehind中)。我测试了一个超出我控制范围(或在中继器内)的按钮,它运行得很好。

我想这可以归结为添加或绑定所有内容的顺序,但我真的看不出是什么。这是我控制的本质:

public class SomeControl : Control, INamingContainer
{
    [PersistenceMode(PersistenceMode.InnerProperty)]
    [TemplateContainer(typeof(SomeTemplateContainer))]
    public ITemplate SomeTemplate { get; set; }
    public override ControlCollection Controls
    {
        get
        {
            EnsureChildControls();
            return base.Controls;
        }
    }
    protected override void CreateChildControls()
    {
        if (ChildControlsCreated)
            return;
        base.Controls.Clear();
        // Creating template containers, instantiating in controls and adding controls
        DataBind(); 
        ChildControlsCreated = true;
    }
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        // A bunch of stuff I know work since it operates independently of my button
    }
    // Some private utility methods        
}

我错过了什么或做错了什么?

您必须在中继器的ItemCreated事件中添加someButton.Click

var button = (Button)e.Item.FindControl("someButton") ;
button.Click += ......

相关内容

  • 没有找到相关文章

最新更新