前提: Channel Partners ユーザー コントロールには、新しいパートナーを追加するためのポップアップが含まれています。ポップアップには、実際にデータをデータベースにコミットするサーバー側クリック ハンドラーを備えた [保存] ボタン (ASP.Net サーバー側コントロール) があります。また、ユーザー コントロールには、非同期ポストバック トリガーを備えた追加の更新パネルが含まれているため、ユーザーが新しいパートナーを保存すると、フォームはポストバックされず、代わりに非同期ポストバックが作成されます。
そのため、通常はイベントを使用して、ユーザー コントロールが互いに通信できるようにします。この場合、新しいチャネル パートナーがいつ作成されたかを示すイベントを発生させ、このイベントで更新パネルをトリガーする必要があります。
チャネル パートナーのユーザー コントロール。
したがって、NewChannelPartnerCreated という新しいイベントを Channel Partners ユーザー コントロールに追加します。
public event EventHandler<EventArgs> NewChannelPartnerCreated;
また、チャネル パートナーのユーザー コントロールについては、保存ボタンのクリック ハンドラーに追加して、保存が正常に完了したらイベントを発生させます。
protected void btnSave_Click(object sender, EventArgs e)
{
// code that commits new partner to the database
if (errors == false)
NewChannelPartnerCreated(this, null);
else
// show errors
}
予約ユーザー コントロール
予約ユーザー コントロールを修正して、パブリック メソッドを公開し、ドロップダウン リストを更新して、ドロップダウン リストをラップする更新パネルの更新メソッドを呼び出します。
Public void RefreshChannelPartnersList()
{
ChannelPartnersListUpdatePanel.Update();
// this databind code might not be needed if you have already have it in the PreRender (not PageLoad)
ddlChannelPartners.DataSource = YouMethodToGetChannelPartnersFromDatabase();
ddlChannelPartners.DataBind();
}
ユーザー コントロール コンテナー ページ
最後に、両方のユーザー コントロールをホストするページの背後にあるコードです。写真を完成させる次の変更を加えます。
ページの読み込み時に、Channel Partners ユーザー コントロールによって発生した NewChannelPartnerCreated イベントをリッスンする必要があります。イベント ハンドラーは、Reservations ユーザー コントロールによって公開されるrefreshメソッドを呼び出すだけです。
protected void Page_Load(object sender, EventArgs e)
{
NewChannelPartnerCtrl.NewChannelPartnerCreated += new EventHandler<EventArgs>(NewChannelPartnerCtrl_NewChannelPartnerCreated);
}
void NewChannelPartnerCtrl_NewChannelPartnerCreated(object sender, EventArgs e)
{
ReservationsCtrl.UpdateChannelPartnersList();
}
ダウンロード可能な例
これを試してください http://sdrv.ms/18138yH