すべてのポストバックで動的コントロールを再作成する必要があります。それを行うのに最適な場所はメソッドCreateChildControls
です。
クリックハンドラーでボタンクリックが設定された後に動的にコントロールを追加するには、いくつかのフラグ(永続フラグ-したがって、ビューステートまたはセッションステートにある必要があります)-次のページの作成時にコントロールを追加する必要があることを示す必要があります。この後、次のように設定する必要がChildControlsCreated = false;
あります。この後、CreateChildControlsが再度実行され、コントロールが正しく作成され、永続的です(フラグをクリアしないまで)。
したがって、次のように実行する必要があります。
protected override void CreateChildControls()
{
base.CreateChildControls();
if (ViewState["AddControl"] == true)
{
Controls.Add(new MyControl() {Id = "someId" });
}
}
そしてbtnハンドラー
private void OnShowControlClick(object sender, EventArgs e)
{
ViewState["AddControl"] = true;
ChildControlsCreated = false;
}