Запустить обновление UpdatePanel с помощью элемента управления, который находится в другом ContentPlaceHolder - PullRequest
12 голосов
/ 06 января 2009

У меня есть страница с двумя ContentPlaceHolders. У одного есть DropDown, а у другого UpdatePanel с контентом.

Как я могу инициировать обновление UpdatePanel с помощью события selectedItemChanged DropDown, когда они находятся в разных держателях содержимого ContentPlace,

Следующее не будет работать, так как 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 ().

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

Ответы [ 3 ]

22 голосов
/ 06 января 2009

С http://msdn.microsoft.com/en-us/library/system.web.ui.asyncpostbacktrigger.aspx

Контроль, который Ссылки AsyncPostBackTrigger должны находиться в том же контейнере именования, что и панель обновления, для которой это спусковой крючок. Триггеры, основанные на элементы управления в других контейнерах именования не поддерживаются.

Обходной путь должен использовать UniqueID элемента управления, который триггер ссылается. К сожалению, уникальный идентификатор не подходит пока элемент управления не будет добавлен к его родителю (и его родителю был добавлен к его родителю, вплоть до дерева управления).

В вашем коде попробуйте:

UpdatePanel1.Triggers.Add(new AsyncPostBackTrigger()
{
    ControlID = DropDown1.UniqueID,
    EventName = "SelectedIndexChanged", // this may be optional
});
3 голосов
/ 06 января 2009

В файле с выделенным кодом вы должны уметь:

ScriptManager.RegisterAsyncPostBackControl(dropdown1);
2 голосов
/ 05 мая 2011

Вы можете принудительно обновить любую страницу UpdatePanels, вызвав метод updatePanel1.Update() на стороне сервера. Например, во время обновления updatePanel1 на button1.Click вызовите updatePanel2.Update(), и обе панели будут обновлены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...