这是ASP.Net UpdatePanel的UpdateProgress的典型行为吗?我有一个更新面板,其中包含页面上用户控制窗口内的UpdateProgress控件。
如果我然后在后台进行页面加载并单击用户控件更新面板中的按钮,则UpdateProgress根本不会显示。这就像UpdatePanels刷新请求甚至在实际页面完成业务之后才被注册。值得注意的是,如果背景中没有任何事情发生,它会显示出来。
我想要的功能就是你所期望的。我希望加载器显示是否必须等待任何事情才能在单击按钮后完成刷新。
我知道如果我只使用jquery ajax和静态Web方法,我可以获得此功能,但是您不能在用户控件中使用静态Web方法。我可以在页面中拥有它,但它确实不属于那里。在这种情况下,完整的wcf也不值得。我试图与UpdatePanel妥协,但这些事情似乎总是给我带来一些麻烦。
也许这只是它的工作方式?
编辑:所以我会澄清一下我在做什么。
发生的事情是我有一个页面,它上面有一些工具和一张大地图。页面最初加载时需要一些时间来加载地图。现在,如果在加载时我打开了具有相关更新面板的工具(用户控件),然后单击此用户控件上的按钮,该按钮应该使用新数据刷新更新面板并显示加载符号(在updateprogress中) )然后UpdateProgress加载图像不会显示。但是,按钮单击运行的代码在页面加载完成后运行(如预期的那样),如果正在加载包含用户控件的页面上没有任何内容,则UpdateProgress将显示。
我只是希望在页面加载时显示加载程序。
我认为我的问题是,地图加载可能在更新面板中,而我的UpdateProgress只与用户控件的更新面板的更新面板相关联。因此,在加载地图时我不会加载图标。但事实并非如此。
答案 0 :(得分:1)
我并没有完全遵循你在这里所做的事情,但我假设你已经使用了你的用户控件中的内容,并确认如果直接放在页面中它可以正常工作?
作为旁注,我个人正在扯掉UpdatePanels并取代jQuery替换,因为除了实现jQuery等更方便的时间之外,还可以显着节省性能。怪癖而不是ASP.NET AJAX怪癖。说实话,我希望能够回到我投资UpdatePanels / ASP.NET AJAX的时候。
答案 1 :(得分:1)
我相信我多次阅读您的OP后理解您的问题。我自己遇到了这种情况,很难让UpdateProgress在Page_Load上运行。解决方案?不要在Page_Load上触发服务器端事件最初。添加一个位于UpdatePanel内的AJAX Timer,如下所示:
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Timer ID="ajxTmr1" runat="server" Interval="1000" OnTick="ajxTmr1_Tick" />
</ContentTemplate>
</asp:UpdatePanel>
在计时器刻度事件中,根据需要执行您的服务器代码。如果您有一个更新进度连接到上面的UpdatePanel,一切都应该正常工作。
<asp:UpdateProgress ID="UpdateProgress1" runat="server" DisplayAfter="0" AssociatedUpdatePanelID="UpdatePanel1" Visible="false">
<%--Panel or whatever goes here--%>
</asp:UpdateProgress>