これが単純なプロバイダーとコンシューマーのWebパーツです。プロバイダーUIは、単に出力するコンシューマーWebパーツに渡すテキストフィールドを受け入れます。Webパーツ間の接続は、次のインターフェイスです。
namespace ConnectedWebParts
{
public interface IParcel
{
string ID { get; }
}
}
プロバイダーWebパーツはこのインターフェイスを実装し、それ自体を返す属性ConnectionProviderを持つメソッドを持っている必要があります(インターフェイスを実装しているため)。
namespace ConnectedWebParts
{
public class ProviderWebPart : WebPart, IParcel
{
protected TextBox txtParcelID;
protected Button btnSubmit;
private string _parcelID = "";
protected override void CreateChildControls()
{
txtParcelID = new TextBox() { ID = "txtParcelID" };
btnSubmit = new Button() { ID = "btnSubmit", Text="Submit"};
btnSubmit.Click += btnSubmit_Click;
this.Controls.Add(txtParcelID);
this.Controls.Add(btnSubmit);
}
void btnSubmit_Click(object sender, EventArgs e)
{
_parcelID = txtParcelID.Text;
}
[ConnectionProvider("Parcel ID")]
public IParcel GetParcelProvider()
{
return this;
}
string IParcel.ID
{
get { this.EnsureChildControls(); return _parcelID; }
}
}
}
コンシューマーWebパーツは、接続インターフェース(プロバイダーWebパーツ)をパラメーターとして実装するオブジェクトを受け入れるConnectionConsumer属性を持つメソッドを定義する必要があります。
namespace ConnectedWebParts
{
public class ConsumerWebPart : WebPart
{
protected IParcel _provider;
protected Label lblParcelID;
protected override void CreateChildControls()
{
lblParcelID = new Label();
if (_provider != null && !String.IsNullOrEmpty(_provider.ID))
lblParcelID.Text = _provider.ID;
this.Controls.Add(lblParcelID);
}
[ConnectionConsumer("Parcel ID")]
public void RegisterParcelProvider(IParcel provider)
{
_provider = provider;
}
}
}