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()を呼び出します。
もっと簡単な方法はありますか?
から 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
});
分離コードファイルでは、次のことができるはずです。
ScriptManager.RegisterAsyncPostBackControl(dropdown1);
サーバー側でupdatePanel1.Update()
メソッドを呼び出すことにより、任意のページUpdatePanelsを強制的に更新できます。たとえば、更新中に_button1.Click
_のupdatePanel1がupdatePanel2.Update()
を呼び出すと、両方のパネルが更新されます。