Подтвердить что ты не робот

Запустить обновление 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().

Есть ли более простая альтернатива?

4b9b3361

Ответ 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() и обе панели будут обновлены.