Это моя ситуация:
Страница:
<asp:UpdatePanel ID="updatePanel1" runat="server" ChildrenAsTriggers="true">
<ContentTemplate>
...
<uc:ChildControl ID="ucChild" runat="server" />
...
</ContentTemplate>
</asp:UpdatePanel>
ChildControl:
...
<asp:DropDownList id="dropDown1" runat="server" />
...
Я хочу обновить UpdatePanel (асинхронно) на странице, когда изменяется выбор DropDownList в ChildControl. Я пробовал AutoPostBack = "true", но это всегда приводит к полному PostBack страницы (см. этот вопрос ).
Я пытался использовать
<Triggers>
<asp:AsyncPostBackTrigger ControlID="???" EventName="SelectedIndexChanged" />
</Triggers>
но ни «dropDown1», ни «ucChild.dropDown1» не работали в качестве значений для ControlID.
Я также попытался передать ссылку на UpdatePanel в ChildControl и добавить триггер следующим образом:
protected override void OnPreRender(EventArgs e)
{
if (ParentUpdatePanel != null)
{
AsyncPostBackTrigger trigger = new AsyncPostBackTrigger();
trigger.ControlID = dropDown1.ID;
trigger.EventName = "SelectedIndexChanged";
ParentUpdatePanel.Triggers.Add(trigger);
}
base.OnPreRender(e);
}
(также пробовал с dropDown1.ChildID)
Но я все еще не могу заставить UpdatePanel срабатывать при изменении значения в раскрывающемся списке. Кажется, проблема в том, что UpdatePanel не видит элемент управления в ChildControl и, следовательно, не может соответствующим образом установить триггер.
Как я могу это сделать?