【问题标题】:Could not find UpdatePanel with ID 'xxx'. If it is being updated dynamically then it must be inside another UpdatePanel找不到 ID 为“xxx”的 UpdatePanel。如果它是动态更新的,那么它必须在另一个 UpdatePanel 中
【发布时间】:2011-04-25 02:28:18
【问题描述】:

我有一个带有 Ajax 选项卡控件的页面,其中一个选项卡中有一个 Web 控件,它作为 Telerik RadGrid,编辑表单指向另一个 Web 控件。该编辑表单还包含 Ajax 选项卡,并且在其中一个选项卡上,还有另一个 Web 控件的 Ajax 模式弹出窗口。

初始 web 控件在其自己的页面上使用时可以正常工作,但在 Ajax 选项卡中根据需要使用该控件时,编辑表单无法显示。脚本管理器抛出以下错误:

Microsoft JScript 运行时错误:Sys.InvalidOperationException:找不到 ID 为“xxx”的 UpdatePanel。如果它是动态更新的,那么它必须在另一个 UpdatePanel 中。

我们将不胜感激。

【问题讨论】:

    标签: asp.net ajax vb.net telerik


    【解决方案1】:

    当您向 Telerik RadAjaxManager 添加不可见控件时,会出现此问题。

    因此,如果您需要显示/隐藏 AJAX 控件,建议您从后面的代码(基于控件可见性状态)而不是 ASPX 代码中以语法方式添加 AJAX 设置。

    欲了解更多信息:Please check this answer on the Telerik forums.

    【讨论】:

      【解决方案2】:

      嗯,我正在考虑这个错误出现在你的脚本中。如果您正在显示/隐藏更新面板,则会出现此错误。我知道最好的解决方案也是将您的更新面板放入另一个更新面板的内容模板中,该模板将成为您正在显示/隐藏的更新面板的父级。

      <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 >
      

      现在,如果您要隐藏 ID 为 Panel2 的更新面板,它不会出现任何错误。

      【讨论】:

        【解决方案3】:

        在大多数情况下 - 如果该更新面板的容器/父级是 trRow 并且您的代码中有 trRow.Visible = false; 这样的地方,然后它不会找到所说的更新面板并抛出错误。

        【讨论】:

          【解决方案4】:

          从故障排除开始,我个人会尝试删除部分代码,从而指定错误原因。例如,删除网格并在选项卡单击时动态加载用户控件以查看问题是否仍然存在,然后删除内部 ajax 选项卡或模式弹出窗口并执行另一次检查等。

          【讨论】:

            【解决方案5】:

            没错,我已经浪费了 2 个小时来找出为什么我的代码突然停止工作了......

            原来我已经清理了太多我的rem'ed代码,并在我的更新面板中删除了一个关闭...

            <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>
            

            然后在它下面的隐藏更新面板部分给出了同样的错误。

            在我把丢失的东西放回去之后,人就恢复了正常状态

            <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>
            

            希望它对某人有所帮助。 克

            【讨论】:

              【解决方案6】:

              我通过删除包含 WebControl 的初始选项卡上的 UpdatePanel 解决了这个问题。我不清楚为什么这会导致这个问题,所以如果有人能解释一下,我很想知道。

              所以,例如,我最初有这个:

              <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>
              

              我把它改成了:

              <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>
              

              这解决了来自用户控件的脚本错误,该控件还包含 ajax 选项卡和模式弹出窗口。

              【讨论】:

                【解决方案7】:

                这可能是由于未闭合的标签或缺少结束标签造成的。

                【讨论】:

                  【解决方案8】:

                  就我而言,页面上有 2 个更新面板,但其中只有 1 个有 ID。为另一个设置 ID 解决了错误。

                  【讨论】:

                    【解决方案9】:

                    我的页面包含一些更新面板。我通过确保所有这些都可见并且没有 display:none 来修复此错误。

                    您可以通过查看页面来源并搜索错误提供给您的 ID 来查找导致错误的面板。

                    【讨论】:

                      【解决方案10】:

                      编辑:我想根据在 UpdateMode="Conditional" 中使用更新面板时发现的一些新内容来修改我的答案。

                      这仍在解决 OP 遇到上述错误的问题。

                      我的情况是我有一个包含多个嵌套子更新面板的父更新面板:

                          <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>
                      

                      为了让“编辑”按钮更改两个子更新面板中的内容并刷新整个父更新面板而不引起任何问题,您可能需要考虑进行异步回发:

                          <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>
                      

                      这对我有用,我不再收到上述(OP)错误。 有趣的是,几乎类似于 OP 的场景,我一直在使用 Ajax 选项卡控件,每个选项卡都包含子更新面板。这是我遇到完全相同的错误消息的地方,并通过添加异步回发触发器解决了它。

                      【讨论】:

                      • 不用说,您需要在编辑按钮的 OnClick 事件处理程序中调用 upParent.Update() 之类的东西来刷新内容,因为它的更新模式是有条件的。
                      猜你喜欢
                      • 2012-07-28
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2012-01-18
                      • 2012-08-21
                      相关资源
                      最近更新 更多