7

每当我的更新面板执行 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 &quotGenerate" 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 文本。

4

7 回答 7

6

UpdateProgressPanel 也有同样的问题。我发现当您放置 UpdateProgressPanel 并将其关联到 UpdatePanel 时,来自该 UpdatePanel 的任何回发都会导致 UpdateProgressPanel 显示。

另一个技巧是,如果页面上有一个 UpdatePanel,则删除 AssociatedUpdatePanel 参数,这将导致 UpdateProgressPanel 显示发生的每个 Async PostBack。

UpdateProgressPanel 可以放在代码中的任何位置,除了那些上面有预定义标签的区域。它可以放置在 UpdatePanel 内部或外部,它会显示您是否正确放置了它的 CSS、将其关联到 UpdatePanel 或只是将其放置在那里,如果发生异步回发结果,它将显示出来。

于 2009-04-26T14:32:37.420 回答
4

不要将更新进度控件放在更新面板控件中

于 2009-02-06T18:32:35.620 回答
4

确保 UpdateProgress 'DisplayAfter' 设置为 1000(1 秒)

于 2010-10-21T16:41:14.890 回答
2

我想我知道发生了什么。问题不在于我在 UpdateProgress 或 Panel 上做错了什么。是我在后台加载了其他东西,显然阻碍了 UpdatePanel 的 Ajaxyness。

所以基本上发生的事情是加载图标不会出现在初始页面加载中。我意识到这一点是因为我实际上是等到页面上的所有内容都完全加载后才触发按钮。果然,装载机出现了。

我假设至少会在听到单击事件的那一刻请求更新面板刷新,因此加载器图标会在其他内容加载期间立即显示。不过好像不是这样的……

于 2009-02-06T20:11:06.810 回答
2

将我的项目从 VS2008 转换为 VS2010 后,我真的很难过。UpdateProgress 突然停止工作,这在 VS2008 中很好。花了一个下午的时间寻找答案并试验了这个那个,最后我从Scott Gu 的帖子中发现了问题所在。

这是一个自动生成的 web.config 条目'xhtmlConformance mode="Legacy" '。

禁用此功能后,它再次开始工作。对你来说可能不是这样,而只是对于那些在同样问题上苦苦挣扎的人。

快乐编码

于 2010-10-08T00:37:36.373 回答
1

我也遇到了 UpdateProgress 没有显示的问题。原来回发到服务器实际上是如此之快,它从来没有时间显示。添加 Thread.Sleep(10000) 有助于显示问题。

于 2015-01-08T11:56:17.490 回答
-1

创建一个新的支持 ASP.NET Ajax 的网站,然后将这些代码粘贴到 ascs 和 aspx 文件中。运行它,您可以看到更新进度。您也可以使用动画 gif 文件来显示进度...

ascx 页面:

<%@ 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>

页面:

 protected void UpdateButton_Click(object sender, EventArgs e)
    {
        System.Threading.Thread.Sleep(5000);
    }
于 2012-08-15T07:24:28.733 回答