0

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

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

测试.aspx

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

2 回答 2

0

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

  1. 在 a 内PlaceHolder,您可以通过以编程方式将其删除来更改控件
  2. 正在缓存中,asp.net 使用缓存的渲染数据而不是再次创建它
  3. 在 a 内ContentPlaceHolder,您可以使用其他内容更改该内容
  4. 一般来说,可以在运行时添加、删除和删除控件。
于 2012-12-24T20:13:44.017 回答
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);

它会为你工作。

于 2012-12-25T05:38:15.503 回答