0

我创建了一个简单的 asp.net 测试自定义控件,并试图弄清楚为什么单击事件不会触发。下面是代码。Page_Load我只是在使用该控件的 .aspx 页面的测试页面上创建控件的实例protected void Page_Load(object sender, EventArgs e) { Page.Form.Controls.Add(new TestControl()); }

该页面会回发,但不会在用户控件中获取点击事件。请解释我做错了什么或用特定模式等更好的方法来解决这个问题。

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

namespace WorldOfTest
{
    public class TestControl : WebControl { private Button 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); ;
    }

    }
}
4

2 回答 2

0

如果您的按钮在控件集合中,则无需覆盖渲染并调用 btn.Render。我还会添加它并订阅事件 OnLoad。最后一件事,您需要实现 INamingContainer。

protected override void OnLoad(EventArgs e)
{
   btn = new Button();
   btn.Click += new EventHandler(btn_Click);  
   btn.Text = "test button";
   this.Controls.Add(btn);
}
于 2013-04-12T15:37:13.770 回答
0

当您将自定义控件添加到页面时,请使用 LoadControl。

var control = (TestControl)LoadControl("~/path/to/TestControl.ascx");
Page.Form.Controls.Add(control);
于 2013-04-12T15:28:05.307 回答