我正在创建一个自定义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();
答案 0 :(得分:0)
如果出现以下情况,控件可以为空:
PlaceHolder
内,您可以通过编程方式删除控件来更改控件ContentPlaceHolder
内,您可以使用其他答案 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);
它适用于你。