2010-10-13 58 views
11

Tengo una página con controles Ajax Tab, dentro de una de las pestañas hay un control web que como Telerik RadGrid, con los formularios Edit apuntando a otro control web. Ese formulario de edición también contiene pestañas Ajax y en una de esas pestañas hay una ventana emergente modal Ajax de otro control web.No se pudo encontrar UpdatePanel con ID 'xxx'. Si se actualiza dinámicamente, entonces debe estar dentro de otro UpdatePanel

El webcontrol inicial funciona bien cuando se usa en su propia página, pero el formulario de edición no aparece cuando el control se utiliza dentro de las pestañas Ajax como se desee. El administrador de scripts genera el siguiente error:

Error de tiempo de ejecución de Microsoft JScript: Sys.InvalidOperationException: No se pudo encontrar UpdatePanel con el ID 'xxx'. Si se actualiza dinámicamente, debe estar dentro de otro UpdatePanel.

Cualquier ayuda con esto sería apreciada.

+0

Publique un código por favor –

Respuesta

2

Para comenzar con la solución de problemas, personalmente intentaré eliminar partes del código y así designar el motivo del error. Por ejemplo, elimine la cuadrícula y cargue el control de usuario dinámicamente en la pestaña haga clic para ver si el problema persiste, luego elimine la pestaña ajax interna o la ventana emergente modal y realice otra comprobación, etc.

1

Resolví el problema quitando el UpdatePanel en la pestaña inicial que contenía WebControl. No tengo claro por qué esto debería haber causado el problema, así que si alguien puede explicar eso, estaría interesado en averiguarlo.

Así, por ejemplo, que originalmente tenía la siguiente:

<cc1:TabContainer ID="TabContainer1" runat="server" ActiveTabIndex="0" OnClientActiveTabChanged="TabContainer1_OnChanged" Visible="true" > 
    <cc1:TabPanel runat="server" ID="TabPriorities"> 
      <HeaderTemplate>Manage Prioritys</HeaderTemplate> 
      <ContentTemplate> 
       <asp:UpdatePanel ID="UpdatePanelPriorities" runat="server" UpdateMode="Conditional"> 
        <ContentTemplate> 
         <uc1:PriorityGrid ID="PriorityGrid1" runat="server" /> 
        </ContentTemplate> 
       </asp:UpdatePanel> 
      </ContentTemplate> 
     </cc1:TabPanel> 

Y lo cambié a:

<cc1:TabContainer ID="TabContainer1" runat="server" ActiveTabIndex="0" OnClientActiveTabChanged="TabContainer1_OnChanged" Visible="true" > 
    <cc1:TabPanel runat="server" ID="TabPriorities"> 
      <HeaderTemplate>Manage Prioritys</HeaderTemplate> 
      <ContentTemplate> 

         <uc1:PriorityGrid ID="PriorityGrid1" runat="server" /> 

      </ContentTemplate> 
     </cc1:TabPanel> 

Y que se resolvió el error de script que sale del control de usuario que también contenía pestañas ajax y una ventana emergente modal.

13

Este problema se produce en Telerik RadAjaxManager cuando se le agregan controles invisibles.

Por lo tanto, en caso de que necesite mostrar u ocultar controles AJAX, se recomienda agregar gramaticalmente la configuración AJAX desde el código (en función del estado de visibilidad de control) en lugar del código ASPX.

Para más información: Please check this answer on the Telerik forums.

6

Bueno, yo estoy considerando este error viene en el script. Si está mostrando u ocultando el panel de actualización, dará este error. La mejor solución que conozco que también funcionó es poner su panel de actualización en la plantilla de contenido del otro panel de actualización que será el padre del panel de actualización que está mostrando/ocultando.

<asp:UpdatePanel ID="Panel1" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <asp:UpdatePanel ID="Panel2" runat="server" UpdateMode="Conditional"> 
      <ContentTemplate> 
       <asp:Label ID="labwl1" runat="server" Text="Label"> 
       </asp:Label> 
      </ContentTemplate> 
     </asp:UpdatePanel > 
    </ContentTemplate> 
</asp:UpdatePanel > 

Ahora si va a ocultar el panel de actualización con id Panel2 no dará ningún error.

2

En la mayoría de los casos - Si el envase/Padre de ese panel de actualización es trRow y tiene en algún lugar de un código como trRow.Visible = false; Entonces no encontrará dicho UpdatePanel y tirar de error.

0

Esto puede ser causado por una etiqueta no cerrada o una etiqueta de final faltante.

1

Eso es correcto, he perdido 2 horas para averiguar por qué de repente mi código dejó de funcionar ...

resultó que he estado un poco limpiando un poco demasiado de mi rem' código de Educación y sacó un cierre en mi panel de actualización ...

<asp:UpdatePanel ID="submitupdatepanel" runat="server"> 
    <ContentTemplate> 
     <div class="block" style="height: 60px; width: 400px;"> 
      <div class="centered"> 
       <asp:LinkButton ID="submitbutton" runat="server" CssClass="button_red2 " Text=" <span>Submit </span>"> 
       </asp:LinkButton> 
       <asp:LinkButton ID="cancelbutton" runat="server" CssClass="button_gray2 " Text=" <span>Cancel</span>" Visible="false" OnClientClick="window.close()"> 
       </asp:LinkButton> 
      </div> 
      </ContentTemplate> 
</asp:UpdatePanel> 
<br /> 
<div style='display: none'> 
    <asp:UpdatePanel runat="server"> 
     <ContentTemplate> 
      <asp:PlaceHolder ID="myhiddenpopups2" runat="server" Visible="true"></asp:PlaceHolder> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
</div> 

que a su vez dio este mismo error por parte UpdatePanel oculto debajo de ella.

después de poner la falta de nuevo, al volvieron a su estado normal

<asp:UpdatePanel ID="submitupdatepanel" runat="server"> 
    <ContentTemplate> 
     <div class="block" style="height: 60px; width: 400px;"> 
      <div class="centered"> 
       <asp:LinkButton ID="submitbutton" runat="server" CssClass="button_red2 " Text=" <span>Submit </span>"> 
       </asp:LinkButton> 
       <asp:LinkButton ID="cancelbutton" runat="server" CssClass="button_gray2 " Text=" <span>Cancel</span>" Visible="false" OnClientClick="window.close()"> 
       </asp:LinkButton> 
      </div> 
     </div> 
    </ContentTemplate> 
</asp:UpdatePanel> 
<br /> 
<div style='display: none'> 
    <asp:UpdatePanel runat="server"> 
     <ContentTemplate> 
      <asp:PlaceHolder ID="myhiddenpopups2" runat="server" Visible="true"></asp:PlaceHolder> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
</div> 

creo que sirve para alguien. K

0

Mi página contiene algunos paneles de actualización. Solucioné este error asegurándome de que todos ellos fueran visibles y no tuvieran pantalla: ninguno.

Puede encontrar el panel que está causando el error al ver el origen de la página y buscar el ID que le está dando el error.

0

EDITAR: Me gustaría revisar mi respuesta basándome en algunas cosas nuevas que descubrí mientras trabajaba con los paneles de actualización en UpdateMode = "Conditional".

Esto todavía está en el contexto de abordar el problema del OP de encontrar el error anterior.

El escenario para mí es que tengo un panel de actualización de los padres con varios paneles de actualización hijo anidados:

<asp:UpdatePanel ID="upParent" runat="server" UpdateMode="Conditional"> 
     <ContentTemplate> 
      <%-- Header Content --%> 
      <asp:UpdatePanel ID="upChild1" runat="server" UpdateMode="Conditional"> 
       <ContentTemplate> 
        <%-- Child1 Content --%> 
       </ContentTemplate> 
      </asp:UpdatePanel> 
      <asp:UpdatePanel ID="upChild2" runat="server" UpdateMode="Conditional"> 
       <ContentTemplate> 
        <%-- Child2 Content --%> 
       </ContentTemplate> 
      </asp:UpdatePanel> 
      <asp:Button ID="btnEditMode" runat="server" Text="Edit" OnClick="btnEditMode_Click"></asp:Button> 
     </ContentTemplate> 
    </asp:UpdatePanel> 

Para que el botón Editar para cambiar el contenido de los dos paneles de actualización niño y también actualizar el Padre general panel de actualización sin causar ningún problema, es posible que desee considerar hacer una devolución de datos asincrónica:

<asp:UpdatePanel ID="upParent" runat="server" UpdateMode="Conditional"> 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="btnEditMode" EventName="Click" /> 
     </Triggers> 
     <ContentTemplate> 
      <%-- Header Content --%> 
      <asp:UpdatePanel ID="upChild1" runat="server" UpdateMode="Conditional"> 
       <ContentTemplate> 
        <%-- Child1 Content --%> 
       </ContentTemplate> 
      </asp:UpdatePanel> 
      <asp:UpdatePanel ID="upChild2" runat="server" UpdateMode="Conditional"> 
       <ContentTemplate> 
        <%-- Child2 Content --%> 
       </ContentTemplate> 
      </asp:UpdatePanel> 
      <asp:Button ID="btnEditMode" runat="server" Text="Edit" OnClick="btnEditMode_Click"></asp:Button> 
     </ContentTemplate> 
    </asp:UpdatePanel> 

Esto funciona para mí, no me sale el error anteriormente mencionado (de OP) por más tiempo. Curiosamente, casi similar al escenario del OP, he estado trabajando con los controles de pestaña Ajax y cada pestaña contenía paneles de actualización para niños. Aquí es donde he encontrado exactamente el mismo mensaje de error y lo resolví agregando el desencadenador posterior de publicación asincrónico.

+0

No hace falta mencionar que tendrá que llamar a algo como upParent.Update() en el controlador de eventos OnClick del botón de edición para actualizar el contenido, ya que su modo de actualización es condicional. – Rafs

Cuestiones relacionadas