.ascx中的.ascx控件为空

时间:2012-12-24 19:56:23

标签: asp.net

我正在创建一个自定义Web控件,但是当我在.cs文件中引用它时,我对.ascx文件的控件为null。我错过了什么吗?

.ASCX

<asp:Table runat="server" BorderWidth="0" BorderStyle="None">
<asp:TableRow VerticalAlign="Middle" BorderWidth="0">
    <asp:TableCell HorizontalAlign="Center" BorderWidth="0" BorderStyle="None">
        <asp:Button ID="button" runat="server" Text="Button" />
    </asp:TableCell>
</asp:TableRow>

<asp:TableFooterRow BorderWidth="0" BorderStyle="None">
    <asp:TableCell HorizontalAlign="Center" ID="caption" Font-Size="12pt" Height="80px" VerticalAlign="Top" BorderWidth="0" BorderStyle="None" BorderColor="Transparent" />
</asp:TableFooterRow>
</asp:Table>

.ASCX.CS

public void Process()
{
    button.Text = "ok"; //it fails here because it's null;
}

Test.aspx文件

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

2 个答案:

答案 0 :(得分:0)

如果出现以下情况,控件可以为空:

  1. 位于PlaceHolder内,您可以通过编程方式删除控件来更改控件
  2. 在缓存上,asp.net使用缓存的渲染数据而不是再次创建
  3. 位于ContentPlaceHolder内,您可以使用其他
  4. 更改该内容
  5. 一般来说,可以在运行时添加,删除和删除控件。

答案 1 :(得分:0)

每当您想要从代码后面添加动态控件时,您必须在任何aspx或ascx html控件中添加该控件。

代码应该是这样的。 :

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

它适用于你。