在UpdateProgress期间隐藏UpdatePanel

时间:2010-03-24 16:05:21

标签: asp.net javascript updatepanel updateprogress

我正在寻找最简单的方法来隐藏UpdatePanel,同时等待提交响应返回。 使用Ajax Control Toolkit和UpdatePanelAnimationExtender的东西like described here都是过度杀伤并导致一些问题,即:

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

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

提前致谢。

3 个答案:

答案 0 :(得分:0)

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

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

编辑:此示例使用jQuery btw

答案 1 :(得分:0)

我建议使用jQuery。它会让你的事情变得更轻松。因此,为了解决“奇怪的ID”问题,你可以像这样做一些jQuery:

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

并显示:

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

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

答案 2 :(得分:0)

处理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之间的延迟显示