Пользовательский серверный элемент управления вызывает полные обратные передачи внутри UpdatePanel - PullRequest
6 голосов
/ 03 июня 2009

У меня есть собственный серверный элемент управления, который, кажется, работает нормально, пока я не поместил его в UpdatePanel. Оказавшись внутри UpdatePanel, он продолжает работать нормально, но UpdatePanel теперь выполняет полную обратную передачу, когда мой пользовательский серверный элемент управления выполняет обратную передачу.

Нужно ли что-либо делать, чтобы мой пользовательский серверный элемент управления выполнял асинхронные обратные передачи, находясь внутри UpdatePanel?

Вот соответствующий код, который вызывает полную обратную передачу. Элемент управления ecs: Pager - это мой пользовательский элемент управления, который вызывает полные обратные вызовы для события OnCommand, даже если оно находится в UpdatePanel.

<asp:UpdatePanel ID="ClosedIssuesUpdatePanel" runat="server">
    <ContentTemplate>
        <ecs:Pager ID="ClosedIssuesPager" OnCommand="ClosedIssuesPager_Command" runat="server" />
        <asp:Repeater ID="ClosedIssuesRepeater" runat="server">
        ....
        </asp:Repeater>
    </ContentTemplate>
</asp:UpdatePanel>

Ответы [ 6 ]

1 голос
/ 08 декабря 2010

У меня была похожая проблема, и я обнаружил, что добавление атрибута ClientIDMode = "AutoID" в мой тег управления пользователем решило проблему.

1 голос
/ 02 сентября 2009

Вы не указываете, какие типы элементов управления используются в вашем пользовательском элементе управления. Они кнопки или выпадающие или что-то еще? Если это кнопки, вам нужно убедиться, что их свойства UseSubmitBehavior имеют значение False.

Кроме того, вы захотите зарегистрировать свои элементы управления в ScriptManager страницы через ScriptManager.RegisterAsyncPostBackControl

1 голос
/ 24 августа 2009

Установите режим обновления панели обновлений на условный.

<asp:UpdatePanel ID="ClosedIssuesUpdatePanel" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <ecs:Pager ID="ClosedIssuesPager" OnCommand="ClosedIssuesPager_Command" runat="server" />
        <asp:Repeater ID="ClosedIssuesRepeater" runat="server">
        ....
        </asp:Repeater>
    </ContentTemplate>
</asp:UpdatePanel>
0 голосов
/ 19 августа 2009

Один вариант может быть таким, как предлагает Андреас Кнудсен, добавить AsyncPostBackTrigger на вашу панель

<asp:UpdatePanel ID="ClosedIssuesUpdatePanel" runat="server">
  <ContentTemplate>
    <ecs:Pager ID="ClosedIssuesPager" OnCommand="ClosedIssuesPager_Command" runat="server" />
    <asp:Repeater ID="ClosedIssuesRepeater" runat="server">
      ....
    </asp:Repeater>
  </ContentTemplate>
  <Triggers>
    <AsyncPostBackTrigger ControlID="ClosedIssuesPager" EventName="Command" />
  </Triggers>
</asp:UpdatePanel>

Другой вариант - попытаться добавить ChildrenAsTriggers в тэг UpdatePanel

<asp:UpdatePanel ID="ClosedIssuesUpdatePanel" runat="server" ChildrenAsTriggers="true">
0 голосов
/ 15 августа 2009

Реализует ли пользовательский элемент управления INamingContainer и происходит ли обратная передача от другого элемента управления внутри этого контейнера именования?

Я обнаружил, что граница контейнера именования между UpdatePanel и элементом управления источником может вызывать это поведение.

0 голосов
/ 03 июня 2009

Извините ... не вижу остальную часть страницы.

У вас также есть ScriptManager на вашей странице?

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