消費者WebパーツはプロバイダWebパーツの変更に応答しません。
-
10-12-2019 - |
質問
現在接続されている3つのWeb部品を使用しています(Bに接続されているBに接続されているWebPart Aに接続されています)。問題は、BとCの間の接続に表示されるWebPart Bはプロバイダとコンシューマで、いくつかの変数を持つドロップボックスだけが含まれています。このDropboxのSelectedItemは提供された値です。これは、WebPart Bで使用しているコードのConnectionProviderです。
[ConnectionProvider("DropboxValue", "dbv")]
public IDropBoxValue provider()
{
return this;
}
.
これは、WebPart Cで使用しているConnectionConsumerです。
[ConnectionConsumer("DropboxValue", "dbv")]
public void consumer(IDropBoxValue providerInterface)
{
_provider = providerInterface;
}
.
ページの最初の負荷でDropboxValueが自動的に選択され、WebPart Cはこの変数を使用してデータを含むSPGridViewを作成します。 Dropbox WebPart Cから新しい項目を選択してこの変数を変更した場合は、それに応答しません。実際、Debugでプロジェクトを実行した場合、WebPart Cから何も呼び出されません。
それでは、WebPart CがWebPart Bの変更に応答しないのはなぜですか?
追加編集
WebPart BでSelectedValueを変更するたびに、テキストが「プロバイダWebパーツが接続されていない」に変更されます。このエラーは私によって作成され、のときにスローされます
.
if (_Provider == null)
_providerはWebPart Aプロバイダのインタフェースです。
解決
私のケースのエラーはCreateChildControlsとonPrerender関数を使用してレイアインします。onprerender関数で呼び出されたときにCreateChildControlsにプロバイダを呼び出しました。
CreateChildControlsで別のWebPartを呼び出すと、そのWebPartのCreateChildControlが開始されていない可能性があります。OnPrederenderが呼び出されたら、すべてのWebPartのすべてのCreateChildControl関数が呼び出されました。そして、OnPrederenderが現在のページですべてのWebPartsと呼ばれる時点で、エクスポートされます。