2010-11-23 1 views
1

У меня есть вложенный дочерний и родительский UpdatePanel. Проблема в том, что при обновлении/публикации дочернего UpdatePanel обновляется UpdateProgress у родителей. Как я могу это предотвратить? Структура такова:Ребенок UpdatePanel и родительская проблема UpdateProgress

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
      <ContentTemplate> 

     <asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePanel1"> 
        <ProgressTemplate></ProgressTemplate> 
     </asp:UpdateProgress> 

     <asp:UpdateProgress ID="UpdateProgress2" runat="server" AssociatedUpdatePanelID="UpdatePanel1"> 
        <ProgressTemplate></ProgressTemplate> 
     </asp:UpdateProgress> 

     <asp:UpdatePanel ID="UpdatePanel2" runat="server" ChildrenAsTriggers="false" UpdateMode="Conditional"> 
      <ContentTemplate> 
       <asp:UpdateProgress ID="UpdateProgress3" runat="server" AssociatedUpdatePanelID="UpdatePanel2"> 
            <ProgressTemplate></ProgressTemplate> 
           </asp:UpdateProgress> 
      </ContentTemplate> 
       </asp:UpdatePanel> 

     </ContentTemplate> 
</asp:UpdatePanel> 

Когда UpdatePanel2 размещен, UpdateProgress3 не отображается, но UpdateProgress1 и UpdateProgress2 есть. Что мне делать?

ответ

1

UpdateMode свойства UpdatePanel1 не указано, так что по умолчанию для Always, что означает UpdatePanel1 будет обновлен, когда любой другой UpdatePanel на странице выполняет частичную обратную передачу.

Попробуйте указать UpdateMode="Conditional" во всех ваших UpdatePanels:

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
</asp:UpdatePanel> 
+0

Я добавил UpdateMode = "Условный" в UpdatePanel1, но он все тот же, UpdateProgress1 и 2 отображаются, а не 3 .. – dstr 2010-11-24 08:12:08

1

Видел здесь: http://www.asp.net/AJAX/Documentation/Live/overview/UpdateProgressOverview.aspx

Если элемент управления UpdatePanel находится внутри другой панели обновления, обратная передача, которая происходит внутри ребенка панели вызывает какие-либо UpdateProgress элементы управления, связанные с дочерней панелью для отображения. Он также отображает любые элементы управления UpdateProgress, связанные с родительской панелью. Если postback происходит от непосредственного дочернего элемента управления родительской панелью, отображаются только элементы управления UpdateProgress, связанные с родительской панелью. Это следует за логикой того, как запускаются обратные вызовы.

Так что, я думаю, вы должны скрыть родитель UpdateProgress:

на клиентской

Вы можете программно контролировать, когда элемент управления UpdateProgress отображается с помощью JavaScript BeginRequest и EndRequest события класса PageRequestManager. В обработчике события beginRequest отобразите элемент DOM, который представляет элемент управления UpdateProgress. В обработчике события endRequest скройте элемент.