1

別のコントロールを拡張するカスタマー サーバー コントロールに取り組んでいます。フォーム上の他のコントロールにアタッチしても問題ありません。

vb.netで: Parent.FindControl(TargetControlName)

ASPX マークアップでコントロールにメソッドを渡したいと思います。

例えば:<c:MyCustomerControl runat=server InitializeStuffCallback="InitializeStuff">

そこで、リフレクションを使用して、親から指定されたメソッド名にアクセスしようとしました。

(VBで)のようなもの

Dim pageType As Type = Page.GetType
Dim CallbackMethodInfo As MethodInfo = pageType.GetMethod( "MethodName" )

'Also tried 
sender.Parent.GetType.GetMethod("MethodName")
sender.Parent.Parent.GetType.GetMethod("MethodName")

メソッドはページの一部ではないため、見つかりません。どこを見ればいいですか?他のコントロールが同様の動作をするのを見たことがあるので、これが可能であると確信しています。


言い忘れましたが、私の回避策は、制御イベントを提供し、コード ビハインドでそれらにアタッチすることです。

4

5 に答える 5

2

ASPX マークアップでメソッドを渡すことができるようにする場合はBrowsable、イベントのコードで属性を使用する必要があります。

VB.NET

<Browsable(True)> Public Event InitializeStuffCallback

C#

[Browsable(true)]
public event EventHandler InitializeStuffCallback;

リファレンス: コンポーネントおよびBrowsableAttribute クラスの設計時属性

すべてのイベント、プロパティ、またはコントロールのコード ビハインドにある必要があるものはすべて、タグ コードで変更できるようにするために browsable 属性を使用します。

于 2008-08-28T19:24:26.793 に答える
2

通常、リフレクションを介してメソッドを取得する必要はありません。ユーザー コントロール内で、パブリック イベントを定義します (申し訳ありませんが vb 構文がわからないため、これは c# になります)。

public event EventHandler EventName;

次に、aspx ページまたはユーザー コントロールの任意のコンテナー内で、EventHandler に一致する保護されたメソッドを定義します。

protected void MyCustomerControl_MethodName(object sender, EventArgs e) { }

これで、マークアップ内で使用できます

<c:MyCustomerControl id="MyCustomerControl" runat=server OnEventName="MyCustomerControl_MethodName">
于 2008-08-28T19:32:42.590 に答える
0

すべての ASP.NET ページは、次のように継承された独自のクラスです。Page

class MyPage : Page

したがって、リフレクションを介してそのメソッドを見つけるには、ページ コードを格納するページ クラスの型である正しい型を取得する必要があります。

このコントロールをインスタンス化するには、複数のページをサポートする必要があると思います。リフレクションを介して Page の任意のインスタンスの子タイプを見つけることができると思いますが、方法は覚えていませんが、できるはずです。

しかし... 他の人が言ったように、そのような場合はイベントの目的です.

于 2008-08-28T19:34:17.907 に答える
0

あなたの回避策は、実際にはより良い答えです。コントロールのライフサイクルの特定の部分で実行する必要があるコードがある場合は、イベントを公開して、コンテナーがカスタム機能でライフサイクルを拡張できるようにする必要があります。

于 2008-08-28T19:16:47.717 に答える
0

buyutec と Jesse Dearing はどちらも受け入れ可能な答えを持っています。

[Browsable(true)]  

[プロパティ] ウィンドウにプロパティが表示されます。ただし、イベントは表示されません。これは私には何の違いもありません。

前に見落としていたのは、タグからコントロールの偶数を参照すると、On で終わるという事実でした。

于 2008-08-28T22:18:14.580 に答える