web-dev-qa-db-ja.com

別のContentPlaceHolderにあるコントロールによってUpdatePanelの更新をトリガーする

2つのContentPlaceHoldersを含むページがあります。 1つにはDropDownがあり、もう1つにはコンテンツを持つUpdatePanelがあります。

ContentPlaceholderが異なる場合、ドロップダウンのselectedItemChangedイベントによってUpdatePanelの更新をトリガーするにはどうすればよいですか?

UpdatePanel1はDropDown1を認識しないため、以下は機能しません。

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"  ChildrenAsTriggers="true">
    <ContentTemplate>
        Some content that needs to be updated here...
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="DropDown1" EventName="SelectedIndexChanged" />
    </Triggers>
</asp:UpdatePanel>

1つの方法は、DropDownの項目が選択されたときにページ上のJavaScriptによって呼び出されるAjaxページメソッドを作成することです。次に、コードビハインドで、そのページメソッド内でUpdatePanel1.Update()を呼び出します。

もっと簡単な方法はありますか?

13
dev.e.loper

から http://msdn.Microsoft.com/en-us/library/system.web.ui.asyncpostbacktrigger.aspx

AsyncPostBackTriggerが参照するコントロールは、トリガーである更新パネルと同じ名前付けコンテナーにある必要があります。他の名前付けコンテナーのコントロールに基づくトリガーはサポートされていません。

回避策は、トリガーが参照しているコントロールのUniqueIDを使用することです。残念ながら、UniqueIDは、コントロールがその親に追加されるまで(そしてその親がコントロールツリーまでずっと親に追加されるまで)修飾されません。

コードビハインドで、次のことを試してください。

UpdatePanel1.Triggers.Add(new AsyncPostBackTrigger()
{
    ControlID = DropDown1.UniqueID,
    EventName = "SelectedIndexChanged", // this may be optional
});
22
Crescent Fresh

分離コードファイルでは、次のことができるはずです。

ScriptManager.RegisterAsyncPostBackControl(dropdown1);
3
Robert C. Barth

サーバー側でupdatePanel1.Update()メソッドを呼び出すことにより、任意のページUpdatePanelsを強制的に更新できます。たとえば、更新中に_button1.Click_のupdatePanel1がupdatePanel2.Update()を呼び出すと、両方のパネルが更新されます。

2
user629910