2009-08-28 14 views
1

ページ上の(多数の)コントロールのOnInitを傍受したいと思います。目的は、実行時にコントロールのさまざまなプロパティを設定することです。問題のプロパティ値がViewState(スペースを節約するため)に格納されないため、コントロールの追跡のために、ViewStateの開始前に傍受が発生することが重要です。ASP.NETコントロールを傍受するOnInit

実行時にプロパティを設定する簡単なテクニックはたくさんありますが、Controlが開始された後にViewStateが追跡された後に発生するため、私のニーズを満たしていません。 (PagePageの方法の間に、Pageのコントロールツリーのコントロールをループする方法がありますが、これは遅すぎますコントロールがツリーに追加された時点でコントロールが開始されています)

私は完璧なソリューションに近づきました。

<browsers> 
    <browser refID="Default"> 
     <controlAdapters> 
      <adapter controlType="System.Web.UI.WebControls.WebControl" adapterType="TestClassLibrary.TestWebControlAdapter, TestClassLibrary"/> 
     </controlAdapters> 
    </browser> 
</browsers> 

次はTestWebControlAdapterのソースコードです:私は.browserファイルに次のように入れ

using System; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.Adapters; 

namespace TestClassLibrary 
{ 
    public class TestWebControlAdapter : WebControlAdapter 
    { 
     protected override void OnInit(EventArgs e) 
     { 
      if (this.Control is Button) 
      { 
       ((Button)this.Control).Text = "Test Adapter"; 
      } 

      base.OnInit(e); 
     } 
    } 
} 

私はこれを見る問題は、アダプタを積層することができないということですので、これはオーバーライドしますその他の場合はこのコントロールに適用される可能性のあるアダプタ。

この問題を解決するためのよりよい方法に関するアイデアはありますか?それがうまくいく間、実際にはPageInitイベントハンドラを追加して、マークアップ内のすべてのコントロールが過剰であり、より一般的な解決策が必要だと考えています。

答えて

0

少し後になっていますが、おそらくPostSharpが面白いでしょう。あなたは潜在的にそれでこのイベントにフックすることができます。

+0

ソースコードを持っているコントロールだけでなく、ボックス内のコントロールでOnInitを傍受できるようにする必要があります。だから私はこれが私を助けてくれるとは思わない。 –

関連する問題