2011-08-11 7 views
3

私はカスタムASP.NETコントロールを持っています。その初期化ハンドラでは私はこのようなページのInitにデリゲートを追加します。ASP.NET:Page.Init fire fire

protected override void OnInit(EventArgs e) 
{ 
    base.OnInit(e); 
    if(someCondition()) 
    { 
      this.Page.Init += delegate(object sender, EventArgs ee) 
      { 
       //some stuff 
      }; 
    } 
} 

を今、私は宣言ページのHTMLにこのカスタムコントロールを追加する場合、すべてのものは、ページのInitデリゲートが呼び出される、正常に動作します。制御GETさんと呼ばれる場合

protected override void OnLoad(EventArgs e) 
{ 
    base.OnLoad(e); 
    MyControl myControl = new MyControl { ID = "myControl" }; 
    this.Page.Form.Controls.Add(myControl); 
} 

初期化しますが、私はPage.Initに添付デリゲートはしていません。しかし、私は、プログラムのようなページにこのコントロールを追加した場合。私はここで間違って何をしていますか?

+0

代わりに、ASP.NETの 'ASP:Panel'コントロールを使用して、必要に応じて' Visible'プロパティを切り替えてコントロールを非表示にすることをお勧めします。 –

+1

他のコントロールの可視性の操作のためにページに余分なコントロールを追加するのは好きではない – Kizz

答えて

2

カスタムコントロールの宣言をOnLoadではなくページのOnInitに移動します。 base.OnInit(e)を呼び出す前に、コントロールをインスタンス化してフォームに追加します。これにより、コントロールがロードされ、実際にはInitがASP.NET実行時に呼び出される前に、ページのInitイベントにデリゲートをアタッチするチャンスが与えられます。あなたの問題は、コントロールのInitが実行されたときにページのInitが既に呼び出されていたことです。

+0

ページのbase.OnInitを呼び出す前にコントロールを初期化してください。 – Kizz

3

読み込み時にコントロールを追加するときにページのInitが既にPage_PreInitイベントハンドラで、それを追加し、代わりにPageLoadにコントロールを追加する

1

を実行したためです。

+0

まだフォームはありません。PreInit – Kizz

関連する問題