找不到ID为'xxx'的UpdatePanel。如果它是动态更新的,那么它必须在另一个UpdatePanel内

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了找不到ID为'xxx'的UpdatePanel。如果它是动态更新的,那么它必须在另一个UpdatePanel内相关的知识,希望对你有一定的参考价值。

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

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

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

对此的任何帮助将不胜感激。

答案

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

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

有关更多信息:Please check this answer on the Telerik forums.

另一答案

在我的情况下,我在页面上有2个更新面板,但只有1个有ID。为另一个设置ID可以解决错误。

另一答案

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

<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隐藏更新面板,它将不会给出任何错误。

另一答案

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

另一答案

在大多数情况下 - 如果该更新面板的容器/父级是trRow并且您在trRow.Visible = false;等代码中有某处,那么它将找不到所述updatepanel并抛出错误。

另一答案

我通过删除包含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选项卡和模式弹出窗口。

另一答案

这是正确的,我浪费了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>

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

在我把失踪者放回去之后,al恢复了正常状态

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

希望它对某人有帮助。 ķ

另一答案

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

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

另一答案

编辑:我想根据我在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 Tab Controls,每个选项卡都包含子更新面板。这是我遇到完全相同的错误消息并通过添加异步回发触发器来解决它的地方。

另一答案

这可能是由未关闭的标记或缺少结束标记引起的。

以上是关于找不到ID为'xxx'的UpdatePanel。如果它是动态更新的,那么它必须在另一个UpdatePanel内的主要内容,如果未能解决你的问题,请参考以下文章

找不到 ID 为“xxx”的 UpdatePanel。如果它是动态更新的,那么它必须在另一个 UpdatePanel 中

import from 'xxx'是如何找到node_modules目录下的

sqlserver 2012 IDE中 Windows身份验证连接服务器报错 ,Login failed for user 'xxxAdministrator'. 原因: 找不到与提(

php模拟post请求,获取不到数据

django -静态文件能加载进入,但是在页面上却显示不出来

如何在 Django 的 URL 匹配中获取中文参数