ページ上の(多数の)コントロールのOnInit
を傍受したいと思います。目的は、実行時にコントロールのさまざまなプロパティを設定することです。問題のプロパティ値がViewState
(スペースを節約するため)に格納されないため、コントロールの追跡のために、ViewState
の開始前に傍受が発生することが重要です。ASP.NETコントロールを傍受するOnInit
実行時にプロパティを設定する簡単なテクニックはたくさんありますが、Control
が開始された後にViewState
が追跡された後に発生するため、私のニーズを満たしていません。 (Page
のPage
の方法の間に、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);
}
}
}
私はこれを見る問題は、アダプタを積層することができないということですので、これはオーバーライドしますその他の場合はこのコントロールに適用される可能性のあるアダプタ。
この問題を解決するためのよりよい方法に関するアイデアはありますか?それがうまくいく間、実際にはPage
のInit
イベントハンドラを追加して、マークアップ内のすべてのコントロールが過剰であり、より一般的な解決策が必要だと考えています。
ソースコードを持っているコントロールだけでなく、ボックス内のコントロールでOnInitを傍受できるようにする必要があります。だから私はこれが私を助けてくれるとは思わない。 –