如何禁用 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?的主要内容,如果未能解决你的问题,请参考以下文章