2011-04-09 133 views
0

我有一個簡單的測試自定義控件,我已經創建並試圖找出爲什麼點擊事件不會觸發。下面是代碼。我簡單地試圖觸發一個ASP.NET自定義控件按鈕事件

的Page_Load消耗控制 保護無效的Page_Load(對象發件人,EventArgs的){ Page.Form.Controls.Add(系統testControl新.aspx頁面中的創建一個測試頁面上的控件的實例()); }

該頁面進行回發,但不會在用戶控件中選取點擊事件。請解釋我在做什麼錯誤,或有更好的方式與特定的模式來處理這等

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI.WebControls; 
using System.Web.UI; 

namespace WorldOfTest 
{ 

公共系統testControl類:WebControl的 { 個人按鈕BTN;

protected override void OnInit(EventArgs e) 
    {    
     base.OnInit(e); 
    } 

    protected override void EnsureChildControls() 
    { 
     btn = new Button();   
     this.Controls.Add(btn); 
     base.EnsureChildControls(); 
    } 

    protected override void CreateChildControls() 
    { 

     btn.Click += new EventHandler(btn_Click); 
     btn.Text = "test button";       
     base.CreateChildControls(); 
    } 

    void btn_Click(object sender, EventArgs e) 
    { 
     throw new NotImplementedException(); 
    } 

    protected override void Render(System.Web.UI.HtmlTextWriter writer) 
    { 
     btn.RenderControl(writer); ; 
    } 

} 
} 

感謝你的幫助

+0

當形式的生命週期要補充控制到集合? – 2011-04-09 13:34:31

+0

當我將控件添加到表單中時,我將它添加到PageLoad中,我也嘗試了PreRender,但是這並沒有解決問題。 – TampaRich 2011-04-09 14:37:39

+0

你有沒有嘗試過1)在生命週期的早些時候添加它2)給它一個ID? – 2011-04-10 14:18:00

回答

0

你必須添加btnControls收集這樣

protected override void EnsureChildControls() 
    { 
     this.btn = new Button(); 
     Controls.Add(btn);   
     base.EnsureChildControls(); 
    } 

編輯:

似乎是我曾經工作的罰款我將按鈕添加到控件的集合中。

我想這

protected void Page_Load(object sender, EventArgs e) 
    { 
     Page.Form.Controls.Add(new Tester()); 
    } 

,我得到這個 enter image description here

+0

我將它添加到EnsureChildControls中的集合中。該事件仍未解僱。 – TampaRich 2011-04-09 14:30:43

+0

我必須錯過一些東西,我完全按照你所做的行爲行事,仍然像刷新頁面一樣行事。我在原評論中根據您的建議添加了我的新代碼。你能發佈你的控制代碼嗎? – TampaRich 2011-04-09 16:49:20

+0

對於控件,我確切地知道你在問題中的含義,以及從我的答案中添加btn到Controls集合中的一行。 – 2011-04-09 17:19:30

相關問題