0

コンシューマーに部分的なポストバックを強制するために、別のWebパーツでボタンonclickメソッドを呼び出してajax接続を管理しようとしています。

WebパーツA(プロバイダー)がWebパーツB(コンシューマー)のメソッドを呼び出します

WebパートA

タイプt=myButton.GetType(); object []p=新しいobject[1]; p [0] = EventArgs.Empty; MethodInfo m = t.GetMethod( "OnClick"、BindingFlags.NonPublic | BindingFlags.Instance); m.Invoke(myButton、p);

WebパートB

public void btnHidden_​​Click(object sender、EventArgs e){Label1.Text = "Hidden Button:" + DateTime.Now.ToString(); }

リフレクションを使用すると、HiddenButtonに関する正しい情報が得られます。ただし、「OnClick」イベントを呼び出すことはできません。btnHidden_​​Clickは実行されません。WebPartBからWebPartBに呼び出すと正常に機能しますが、別のWebパーツからは機能しません。

この動作に関する情報はあまり多くないようです。助言がありますか?

ありがとう。

ロブ

4

2 に答える 2

1

Web パーツは可能な限り疎結合にする必要があるため、Web パーツ接続インフラストラクチャとサブスクライバー パターンを使用してこれを処理します。

接続されたパーツ間の通信は、インターフェイスを介して行われます。このインターフェイスには、Subscribe および Unsubscribe メソッドを含めることができます。接続が確立されると、コンシューマー パーツは、選択されたアイテムがプロバイダーで変更されたときに更新する必要がある UpdatePanel コントロールをサブスクライブできます。その後、選択したアイテムが変更された場合、プロバイダー パーツはそのサブスクライバーをウォークし、UpdatePanel で Update メソッドを呼び出して、非同期ポストバックを強制できます。

私はこれを自分で試したことはありませんが、唯一の欠点は、非同期ポストバックをトリガーすると、現在進行中の他の非同期ポストバックがキャンセルされるため、Update の呼び出しをキューに入れる必要がある場合があることです。

これが役立つことを願っています。

于 2009-02-17T04:30:45.703 に答える
0

これは、JavaScript を使用して非常に簡単に解決できます。Web パーツが悪いとは言いたくないのですが (Web パーツを使ったことがないので)、ごくわずかな JS を Web パーツにプログラムすることができれば、コードは次のようになります。 :

document.getElementById('ElID').onclick();

幸運を!

于 2009-02-17T04:40:11.250 に答える