Asp.net .ascx.cs中.ascx上的控件为空

Asp.net .ascx.cs中.ascx上的控件为空,asp.net,Asp.net,我正在创建一个自定义web控件,但在.cs文件中引用.ascx文件时,该文件上的控件为空。我错过什么了吗 .ASCX Test.aspx MyButton button = new MyButton(); button.Process(); 在以下情况下,控件可以为空: 位于占位符中,您可以通过编程方式删除它来更改控件 位于缓存中,asp.net将使用缓存的渲染数据,而不会再次创建它 位于ContentPlaceHolder中,您可以使用其他内容更改该内容 一般来说,可以在运行时添加、删除和删

我正在创建一个自定义web控件,但在.cs文件中引用.ascx文件时,该文件上的控件为空。我错过什么了吗

.ASCX

Test.aspx

MyButton button = new MyButton();
button.Process();

在以下情况下,控件可以为空:

  • 位于
    占位符中,您可以通过编程方式删除它来更改控件
  • 位于缓存中,asp.net将使用缓存的渲染数据,而不会再次创建它
  • 位于
    ContentPlaceHolder
    中,您可以使用其他内容更改该内容
  • 一般来说,可以在运行时添加、删除和删除控件

  • 每当您想从代码隐藏中添加动态控件时,必须将该控件添加到任何aspx或ASCXHTML控件中

    代码应该是这样的:

    Button btnNew = new MyButton();
    btnNew.Process();
    btnNew.Controls.Add(pnlTest);
    
    其中“pnlTest”应该是ascx页面中定义的任何html控件

    更新

    这是你帖子的最新答案

    Button btnNew = new Button();
    
    btnNew.Click += new EventHandler(btnNew_Click);    
    btnNew.ID = "btnNew";
    void btnNew_Click(object sender, EventArgs e)
    {
        Process();
    }
    btnNew.Controls.Add(pnlTest);
    

    它将为您工作。

    调用
    LoadControl()
    ,而不是实例化该项。我的要求是需要根据数据库中的指令动态创建所有控件。我尝试了这些,但都失败了,因为“对象引用为null”MyButton button=Page.LoadControl(typeof(MyButton),null)作为MyButton;MyButton button=Page.LoadControl(“MyButton.ascx”)作为MyButton;这正是我正在做的,但它甚至在我将其添加到面板之前就失败了。它在btnNew.Process()失败;
    Button btnNew = new MyButton();
    btnNew.Process();
    btnNew.Controls.Add(pnlTest);
    
    Button btnNew = new Button();
    
    btnNew.Click += new EventHandler(btnNew_Click);    
    btnNew.ID = "btnNew";
    void btnNew_Click(object sender, EventArgs e)
    {
        Process();
    }
    btnNew.Controls.Add(pnlTest);