1

2 つのユーザー コントロールを使用しているページがあります。1 つは予約管理で、もう 1 つはチャネル パートナー管理です。予約管理には、すべてのチャネル パートナーを含むドロップダウンがあります。ユーザーが新しいチャネル パートナーを持っている場合、AddNewChannel リンクをクリックすると、チャネル パートナーがポップアップとして表示され、その後、ユーザーは新しいチャネル パートナーをデータベースに挿入します。今私の問題は、データがデータベースに挿入され、予約のドロップダウンを更新し、新しいチャネルパートナーを含める必要があることです。私はこのように試しました:

UpdatePanel upnl = (UpdatePanel)Page.FindControl("UpdatePanel1");

if (upnl != null)
    upnl.Update();

更新パネルの予約コントロールのドロップダウン。しかし、うまくいきませんでした。助けていただければ幸いです。

4

2 に答える 2

0

Anser はモデル ポップアップの unload メソッドを使用し、そこから更新することでした。このコミュニティから何の回答も得られないことにがっかりしています.....

于 2013-05-14T07:25:54.980 に答える
0

前提: 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

于 2013-05-15T09:20:29.417 に答える