如何禁用 ASP.NET 中某些控件的 UpdateProgress?

Posted

技术标签:

【中文标题】如何禁用 ASP.NET 中某些控件的 UpdateProgress?【英文标题】:How to disable UpdateProgress for certain controls in ASP.NET? 【发布时间】:2015-11-12 07:16:31 【问题描述】:

我有一个使用 ASP.NET 开发的网站。那里发生了很多ajax请求。所以我想在发生 ajax 请求时显示图像,并在加载数据后隐藏图像。现在这工作正常,

到目前为止我做了什么

<asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="uppnlLocation">
<ProgressTemplate>
                  <img src="images/loading.gif" />
</ProgressTemplate>
</asp:UpdateProgress>

<asp:UpdatePanel runat="server" UpdateMode="Conditional" ID="uppnlLocation">
    <ContentTemplate>
  <asp:DropDownList ID="ddContinents" runat="server" CssClass="form-control" OnSelectedIndexChanged="ddContinents_SelectedIndexChanged" AutoPostBack="true">   </asp:DropDownList>

 <asp:TreeView runat="server" ID="tvCountries" OnSelectedNodeChanged="tvCountries_SelectedNodeChanged"></asp:TreeView>
   </ContentTemplate>
 </asp:UpdatePanel>

所以在上面的代码中,当用户从下拉列表中选择一个大陆时,属于该大陆的国家将被加载到下面的树视图中。因此,当用户在加载国家/地区时从下拉列表中选择一个大陆时,我想显示加载图像。现在这正在工作。但问题是当用户在树视图中选择一个树节点时,它也会显示这个进度控制图像。我不想在那个动作上显示那个图像。如何禁用它?

我看到了一个关于这个的帖子。

Is there a way to disable UpdateProgress for certain async postbacks?

我实现了它。但是下拉菜单没有发生回发。

那么如何实现呢?

非常感谢。

【问题讨论】:

【参考方案1】:

最好使用DisplayAfter 参数来提高出现这种情况的延迟,因为我知道这种情况发生得如此之快。不要使用复杂的 javascript 解决方案,只需添加 1 或 2 秒的延迟...

<asp:UpdateProgress ID="UpdateProgress1" 
           runat="server" AssociatedUpdatePanelID="uppnlLocation" DisplayAfter="2000">
     <ProgressTemplate>
         <img src="images/loading.gif" />
     </ProgressTemplate>
</asp:UpdateProgress>

【讨论】:

感谢您的回复,但我认为您误解了我的问题。 :) 在您提出的解决方案中,它看起来如何正确?我说的是一个全球服务网站。在美国,此站点将快速加载。但我不知道这在印度是怎么出现的。所以不能定义一个固定的时间长度。所以我只想在单击树视图时禁用它。 @Sylar 但如果在印度打开时间过长,超过 5 秒,那么您必须显示延迟,否则他们相信这是行不通的......【参考方案2】:

好吧,如果您可以接受的话,为什么不直接使用 javascript 来强制它不显示... 对于正常的更新面板和调用更新进度并不总是显示。最好使用javascript弹出更新进度,而不是使用默认方式。

弹出更新进度的代码

function showUpdateProgress() 
        var updateProgress = document.getElementById("<%=upProgress.ClientID%>");
        updateProgress.style.display = 'block';
    

    function HideUpdateProgress() 
        var updateProgress = document.getElementById("<%=upProgress.ClientID%>");
        updateProgress.style.display = 'none';
        Sys.Application.remove_load(HideUpdateProgress);
    

如果你在 Code behind 中完成工作时使用这种方式,你需要调用 javascript 来隐藏更新进度

如下

在 CS 文件中

ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "Script", "Sys.Application.add_load(HideUpdateProgress);", true);

希望对你有帮助

【讨论】:

以上是关于如何禁用 ASP.NET 中某些控件的 UpdateProgress?的主要内容,如果未能解决你的问题,请参考以下文章

启用使用 jquery 禁用 asp.net 验证控件

在 asp.net 控件上动态禁用验证

如何防止在 ASP.NET Core 的 Razor 视图 HTML 中禁用或只读输入字段的模型绑定?

asp.net 在点击某些按键时,如何让验证控件暂时失效?

使用 javascript 禁用 asp.net 单选按钮

在 ASP.NET 中禁用时更改 RadCombobox 字体颜色