2

まず、私の環境: VB.NET .NET 2.0 AJAX 更新パネルも Web パーツ ゾーンで使用されます。マスターページとデフォルトページがあります。デフォルトのページには WPM と 2 つのゾーンがあります。各 Web パーツは単なるシェルであり、A と B にはユーザー コントロールが使用されます。

A と B の 2 つの Web パーツがあります。(ユーザーコントロール)- A にはいくつかのボタンがあります。B には、リストボックスにデータを入力し、リストボックスをラップする (Web パーツ B 内にある) UpdatePanel を更新するリストボックスとサブがあります。Web パーツ A のボタンをクリックすると、「Public Sub FillList()」という Web パーツ B のサブが起動されます。これを行う方法がわかりません。Webパーツ接続を調べましたが、プロパティを渡すことができることは理解していますが、サブ/ファイアイベントを呼び出したいです。

前もって感謝します!

4

2 に答える 2

1

少し汚いことは知っていますが、ちょっとうまくいく解決策を見つけました:

MyControlThatNeedsUpdated grid = (MyControlThatNeedsUpdated)FindControlRecursive(Page, "MyControlThatNeedsUpdated");
grid.updateList();


private Control FindControlRecursive(Control root, string ControlType)
{
    if (root.GetType().Name == ControlType)
    {
        return root;
    }

    foreach (Control c in root.Controls)
    {
        Control t = FindControlRecursive(c, ControlType);
        if (t != null)
        {
            return t;
        }
    }

    return null;
}

私が呼び出すメソッドは「updateList()」です

于 2009-02-12T13:47:57.477 に答える
1

これは、「イベント バブリング」の場合のように思えます。

イベント バブリングを使用すると、一部のコンテナーの構成コントロールで、そのイベントを "バブリング" または発生させて、親 (コンテナー) コントロールで処理することができます。

Web パーツ A のボタン コントロールでは、クリック イベント内に次のコードを含めることができます。

RaiseBubbleEvent(Me, args)

ここで、args は System.EventArgs から派生したカスタム タイプです。これにより、親コンテナー (この場合は UserControl 自体) で (カスタム引数を使用して) イベントが発生 (または「バブル」) します。これは、親コンテナーの次のイベント内で処理されます。

Protected Overrides Function OnBubbleEvent(ByVal source As Object, ByVal args As System.EventArgs) As Boolean

これは、Web ページ内の包含階層の上で繰り返すことができます (ページが最終的なコンテナーです)。このイベントが両方のユーザー コントロール (A と B) の親であるコンテナーに到達すると、親コンテナーのコード内から UserControl B のパブリック メソッドを呼び出し、必要に応じてカスタム eventargs を渡すことができます。

于 2009-02-10T14:49:21.917 に答える