0

カスタム 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;
}

テスト.aspx

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

2 に答える 2

0

次の場合、コントロールはnullになる可能性があります。

  1. の中にあり、PlaceHolderプログラムで削除してコントロールを変更します
  2. キャッシュ上にあり、asp.netはキャッシュされたレンダリングデータを使用し、再度作成することはありません
  3. の中にあり、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 に答える