Запустить обновление UpdatePanel с помощью элемента управления, который находится в другом ContentPlaceHolder
У меня есть страница с двумя ContentPlaceHolders. У одного есть DropDown и еще одна UpdatePanel с контентом.
Как я могу инициировать обновление UpdatePanel по событию DropDown selectedItemChanged, когда они находятся в разных ContentPlaceholders?
Следующее не будет работать, поскольку 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>
Один из способов - создать способ страницы ajax, который будет вызываться javascript на странице, когда выбран элемент DropDown. Затем в коде, внутри этого метода страницы, вызовите UpdatePanel1.Update().
Есть ли более простая альтернатива?
Ответы
Ответ 1
От 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
});
Ответ 2
В файле с кодовым кодом вы сможете:
ScriptManager.RegisterAsyncPostBackControl(dropdown1);
Ответ 3
Вы можете принудительно обновить любую страницу UpdatePanels методом вызова updatePanel1.Update()
на стороне сервера.
Например, во время обновления updatePanel1 на button1.Click
вызов updatePanel2.Update()
и обе панели будут обновлены.