【问题标题】:Hide UpdatePanel during UpdateProgress在 UpdateProgress 期间隐藏 UpdatePanel
【发布时间】:2026-01-05 21:00:01
【问题描述】:

我正在寻找在等待提交响应返回时隐藏 UpdatePanel 的最简单方法。 like described here 的东西 - 使用 Ajax 控件工具包和 UpdatePanelAnimationExtender 既过大又会导致一些问题,即:

  • 因为页面中有几个隐藏的面板,所以它变得一团糟并隐藏了错误的面板。我不知道为什么会这样;
  • 我找不到一种方法来指定只有一个按钮应该触发动画。我确实在 UpdatePanel 中指定了 a,但它似乎被忽略了,并且面板内的所有控件都会触发动画。

一个简单的 javascript 解决方案将是理想的。这里的问题是 ASP.NET 喜欢在运行时为控件生成奇怪的 ID。有什么解决办法吗?

提前致谢。

【问题讨论】:

    标签: asp.net javascript updatepanel updateprogress


    【解决方案1】:

    处理 PageRequestManager beginRequestendRequest 事件以控制 UpdatePanel 在回发期间的可见性:

        var prm = Sys.WebForms.PageRequestManager.getInstance();
        prm.add_beginRequest(
            function (sender, args) {
                $get("<%=someUpdatePanel.ClientID %>").style.display = "none";
            }
        );
        prm.add_endRequest(
            function (sender, args) {
                $get("<%=someUpdatePanel.ClientID %>").style.display = "";
            }
        );
    

    还将 DisplayAfter="0" 添加到关联的 UpdateProgress 控件,以防止 UpdatePanel 隐藏和 UpdateProgress 显示之间的延迟

    【讨论】:

    • 这是一个很好的答案,但是,当您在页面上有多个更新面板时它不起作用,因为它们都会触发这个。
    • @Shiroy:在beginRequest函数中,您可以通过args.get_updatePanelsToUpdate();获取发起请求的更新面板的ID
    【解决方案2】:

    我建议使用 jQuery。它会让你的事情变得更容易。因此,要解决“奇怪的 ID”问题,您可以像这样执行一些 jQuery:

    $('#<%= someASPControl.ClientID %>').hide();
    

    并显示:

    $('#<%= someASPControl.ClientID %>').show();
    

    这是使用 jQuery 通过 id 获取元素,然后你可以用它做你想做的事。诀窍是“.ClientID”将获取 .net 发出的 id。

    【讨论】:

      【解决方案3】:

      您可以在 html 页面中使用代码标签,并使用控件的 ClientId 属性来吐出 asp.net 生成的 id:

      $('#<%= elementName.ClientID %>').hide();
      

      编辑:这个例子使用 jQuery 顺便说一句

      【讨论】: