2011-04-09 127 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