2010-12-02 16 views
1

私の質問は、デリゲートの一部として呼び出されるメソッドで属性を取得することに関するものです。 Page.OnLoad又はButton_Click] _Page_Loadメソッドを反映するとnullが返される

私はこの方法は、_ _ [AnyWebControl_Event] _ [をPage_Load] _または上[MyMethodAttribute(PropertyOne、PropertyTwo)]属性。このメソッドの属性は、実行時にそのメソッドが配置されたメソッドに対して照会する必要があります。このメソッドは、任意のWebページのコードビハインドに存在します。すべてのウェブページはBaseWebPageから派生しています。イベントは、ページ・ロードまたはポスト・バック・イベントのいずれかになります。 イベントがページロードまたはポストバックによってトリガされたかどうかに基づいて、コントロール[ページまたはポストバック]のハンドルを取得し、[MyMethod]メソッドを追加して実行します。

_eventControl = GetPostBackControl(page); //__EVENTTARGET or any control 
    if (_eventControl != null) // this is a postback control for any page 
    { 
     _eventControl.Load += new EventHandler(MyMethod); 
    } 
    else // this is PageLoad method for any page 
    { 
     _eventControl = page; 
     page.Load += new EventHandler(MyMethod); 
    } 

その後、私はイベントを見つけることを試みています。 Page_Load]を呼び出してページを読み込みます。これはメソッドのハンドルを得ることができず、その周りのさまざまな方法で試しました。

1つの方法は、どのイベントデリゲートがロードまたはポストバックをトリガーしたかを照会することでした。しかし、イベントはクラスの外部からはアクセスできないので、私は使用できませんMyDelegate.GetInvocationList()これはnullを返すためです。

何か助けていただければ幸いです。


さらに努力した結果、__EVENTARGUMENTがメソッド名を提供することがわかりました。 私は今、別の問題があります。 Page_LoadメソッドのASPXページを反映すると、nullが返されます。 アイデア


Page_loadは保護されたメソッドであり、Public BindingFlagsを使用していました。したがって、NonPublicを使用した後|インスタンスフラグ私はPage_Loadメソッドにrelfectionを使用することができます

+0

私の問題の答えが見つかりました。 Page_Loadメソッドが保護されていて、パブリックバインディングフラグを使用していました。私の問題は解決されました。 – ank07

答えて

1

もう少し努力したところ、私は__EVENTARGUMENTが私にメソッド名を提供することを発見しました。


Page_loadは保護されたメソッドであり、Public BindingFlagsを使用していました。したがって、NonPublicを使用した後|インスタンスフラグ私はPage_Loadメソッドにrelfectionを渡すことができます

0

Page.IsPostbackはどうですか? IsPostbackがfalseの場合、ページの読み込みはポストバックによってトリガされず、新しく読み込まれます。

+0

IsPostbackはポストバックかどうかの情報を提供します。しかし、それはどの制御とwhiohイベントに関する情報を提供しません。私は__EVENTTARGETのように、__E​​VENTARGUMENTを使ってイベント名を見つけることができます。だから私は答えを部分的に見つけました。 – ank07

関連する問題