每当我的更新面板执行Ajax操作时,我都会尝试显示更新进度加载图像。我看了一下教程,看起来很简单,但我没有运气。这几乎就是我所拥有的......
<div id="panelWrapper">
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:UpdateProgress ID="TaskUpdateProgress" runat="server" DynamicLayout="False" AssociatedUpdatePanelID="UpdatePanel1" DisplayAfter="0">
<ProgressTemplate>
<asp:Image ImageUrl="~/Images/ajax-loader.gif" Width="16px" Height="16px" runat="server" ID="TaskLoadingImage"/>
</ProgressTemplate>
</asp:UpdateProgress>
<div id="UrlDiv" class="URLNotification">
<asp:Label ID="UrlLabel" runat="server" Text="URL:" AssociatedControlID="Url" />
<asp:HyperLink ID="Url" runat="server" Text="Click "Generate" to create the URL." />
</div>
<br />
<asp:CheckBoxList runat="server" ID="IncludeItems" TextAlign="Right">
<asp:ListItem Selected="True">Include 1</asp:ListItem>
<asp:ListItem Selected="True">Include 2</asp:ListItem>
</asp:CheckBoxList>
<br />
<div id="buttons" style="display:inline;">
<asp:Button ID="Generate" runat="server" OnClicked="Generate_Clicked" Text="Generate" />
<asp:Button ID="Add" runat="server" OnClientClick="add();" Text="Add"/>
</div>
</ContentTemplate>
</asp:UpdatePanel>
我在样式表中也有一些绝对的定位样式。我已经尝试了一些你在这里看到的变化,并没有找到很多关于可能是什么问题的好信息。有任何想法吗?如果您还有其他需要,请告诉我。
编辑:我发现的唯一新信息是......
“在以下情况下,UpdateProgress控件不会自动显示:
UpdateProgress控件与特定的更新面板相关联,但异步回发的结果来自不在该更新面板内的控件。
UpdateProgress控件与任何UpdatePanel控件都没有关联,并且异步回发不是由不在UpdatePanel内且不是触发器的控件引起的。例如,更新是在代码中执行的。“
我非常有信心这些都不适合我的情况。所有发生的事情都是单击按钮(位于更新面板内),调用一些代码,后面的代码是要为更新面板重新加载的URL文本。
答案 0 :(得分:5)
我对UpdateProgressPanel也有同样的问题。 我发现当您放置UpdateProgressPanel并将其关联到UpdatePanel时,来自该UpdatePanel的任何回发都将导致UpdateProgressPanel显示。
如果页面上有一个UpdatePanel,则另一个技巧是删除AssociatedUpdatePanel参数,这将导致UpdateProgressPanel显示发生的每个Async PostBack。
UpdateProgressPanel可以放在代码中的任何位置,除了那些在其上有预定义标记的区域。它可以放在UpdatePanel的内部或外部,它会显示你是否正确放置了它的CSS,将它关联到一个UpdatePanel,或者只是将它放在那里,如果发生了异步回发结果,它就会显示出来。
答案 1 :(得分:4)
不要将更新进度控件放在更新面板控件
中答案 2 :(得分:4)
确保UpdateProgress的“DisplayAfter”设置为1000(1秒)
答案 3 :(得分:2)
我想我弄清楚发生了什么事。问题不在于我对UpdateProgress或Panel做错了什么。我在背景中加载了其他东西,显然是在阻止UpdatePanel的Ajaxyness。
所以基本上发生的事情是加载图标不会显示在初始页面加载上。我意识到这一点,因为我实际上等到页面上的所有内容都被完全加载后才能触发按钮。装载机肯定出现了。
我假设在听到click事件的瞬间至少会请求更新面板刷新,因此加载器图标会在其他内容加载期间立即显示。尽管如此......似乎并非如此......
答案 4 :(得分:2)
将我的项目从VS2008转换为VS2010后,我真的很难过。 UpdateProgress突然停止工作,这在VS2008中很好。花了整整一个下午来搜索答案并试验这个,最后我发现Scott Gu's posting出了什么问题。
这是一个自动生成的web.config条目'xhtmlConformance mode =“Legacy”'。
禁用此功能后,它又开始工作了。可能不是你的情况,只是因为那些在同样的问题上挣扎的人。
快乐编码
答案 5 :(得分:1)
我还没有显示UpdateProgress的问题。原来对服务器的回发实际上是如此之快,以至于没有时间展示。添加Thread.Sleep(10000)有助于显示问题。
答案 6 :(得分:-1)
Create a new ASP.NET Ajax-Enabled Web Site and then paste these code in ascs and aspx file. Run it and you can see the update progress. You can use animated gif files too to show the progress...
ascx Page
======================================================
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>UpdateProgress control</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdateProgress runat="server" id="PageUpdateProgress" AssociatedUpdatePanelID="Panel">
<ProgressTemplate>
Loading...
</ProgressTemplate>
</asp:UpdateProgress>
<asp:UpdatePanel runat="server" id="Panel">
<ContentTemplate>
<asp:Button runat="server" ID="UpdateButton" OnClick="UpdateButton_Click" Text="Update" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="UpdateButton" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
</form>
</body>
</html>
aspx Page
======================================================
protected void UpdateButton_Click(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(5000);
}