2012-09-04 124 views
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   
} 

我在想什麼或做錯了什麼?

+0

在控制類ClickAction界定?此外,這可能有助於http://stackoverflow.com/questions/1005499/problems-with-aspbutton-onclick-event – Soenhay

回答

0

您必須在ItemCreated事件轉發器的添加someButton.Click

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

它不是一箇中繼器,當我嘗試在一箇中繼器內時,我不必這樣做。 OnClick =「」標記就夠了。另外,我試過這個。該事件被正確地連接起來,但仍然沒有被解僱。 –

相關問題