【问题标题】:Issue when Trying to Fire a ASP.NET Custom Control Button Event尝试触发 ASP.NET 自定义控制按钮事件时的问题
【发布时间】:2013-04-12 15:23:41
【问题描述】:

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

页面执行回发,但它不接收用户控件中的点击事件。请解释我做错了什么,或者用特定模式等更好的方法来解决这个问题。

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); ;
    }

    }
}

【问题讨论】:

  • 我会使用 this.Controls.Add(new TestControl());而是在您的页面加载中。 Page.Form.Controls 很奇怪

标签: asp.net custom-controls


【解决方案1】:

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

var control = (TestControl)LoadControl("~/path/to/TestControl.ascx");
Page.Form.Controls.Add(control);

【讨论】:

  • 这是一个 WebControl,而不是 UserControl
  • 嗨 WDuffy,感谢您的及时回复。但我的问题是我正在使用自定义控件...
【解决方案2】:

如果您的按钮在控件集合中,则无需覆盖渲染并调用 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);
}

【讨论】:

    猜你喜欢
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 2018-01-12
    • 2012-12-17
    • 1970-01-01
    • 2023-01-03
    相关资源
    最近更新 更多