1

テンプレート コントロールがありますが、その中からイベントを発生させる際に問題があります。

私の実際のコントロールにはより多くのテンプレートがあり、もう少し複雑ですが、その本質は次のように単純です。

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

すべてが正常にレンダリングされているように見えますが、その中のボタンを押してもイベント ハンドラーが起動しません (私のページのコード ビハインドに存在します)。コントロールのすぐ外側 (またはリピーター内) でボタンをテストしましたが、問題なく動作します。

これは、すべてが追加またはデータバインドされた順序に要約されると思いますが、実際には何がわかりません。これが私のコントロールの本質です:

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        
}

私は何が欠けているか、間違っていますか?

4

1 に答える 1

0

リピーターのイベントに追加する必要がありsomeButton.ClickますItemCreated

var button = (Button)e.Item.FindControl("someButton") ;
button.Click += ......
于 2012-09-04T17:27:23.893 に答える