在页面上加载窗口加载asp:UpdateProgress

时间:2014-01-15 22:05:49

标签: c# asp.net updateprogress

我有一个非常大的页面需要一些时间来提取数据和加载。当第一次导航到.aspx页面时,我希望它有一个很好的加载.png图像,这样人们就不会在显示之前关闭窗口。我已经尝试过放一个asp:UpdateProgress但是这个在页面加载之后才会出现,我在页面上做了一些事情。如何在页面其余部分加载之前首先获取加载屏幕?以下是我尝试过的不起作用。

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdateProgress ID="UpdateProgress1" runat="server" DisplayAfter="10">
        <ProgressTemplate>
            <div id="updatestatus" class="shadow">
            <asp:Label ID="Label12" runat="server" Text="Loading...">
            </asp:Label>
            <asp:Image ID="Image1"
            runat="server" ImageUrl="~/images/1status.png" />
            </div>
        </ProgressTemplate>
</asp:UpdateProgress>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
        <%-- My page loading stuff -->
        </ContentTemplate>
</asp:UpdatePanel>

我也尝试过计时器。这里很有趣。 ContentTemplate内的标签显示为罚款。我放在内容模板中的GridView没有。

<asp:ScriptManager ID="ScriptManager1" runat="server" />
    <asp:Image ID="Image1" runat="server" ImageUrl="~/images/1status.png" />
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" Visible="false">
        <ContentTemplate>
            <!-- My page loading stuff -->
        </ContentTemplate>
    </asp:UpdatePanel>
    <asp:Timer ID="Timer1" runat="server" Interval="600" OnTick="Timer1_Tick"></asp:Timer>


protected void Timer1_Tick(object sender, EventArgs e)
{
 UpdatePanel1.Visible = true;
 Timer1.Enabled = false;
 Image1.Visible = false;
}

我甚至尝试完全取出更新面板,只是更改了计时器上的gridview可见状态,但仍然无法正常工作。 gridview永远不会出现。

有趣的是,如果我在页面上放了一个按钮,那么

protected void ButtonHide_Click(object sender, EventArgs e)
{
        if (GridView1.Visible)
        {
            GridView1.Visible = false;
        }
        else
        {
            GridView1.Visible = true;
        }

}

我可以点击它并隐藏和显示GridView多次我想要没有问题。为什么计时器有所不同?

1 个答案:

答案 0 :(得分:0)

在.aspx代码中,我设置了一个计时器,TimerRefresh但是将其关闭。然后当页面开始加载时,如果这不是PostBack(第一次),我打开TimerRefresh。它立即滴答作响。这会导致页面重新加载,这将是一个PostBack。这会导致UpdateProgress1显示。 PageLoad()将无所作为,因为这是一个PostBack。 TimerRefresh_Tick(object sender, Eventargs e)触发,因为这是由计时器滴答声触发的。这会导致它关闭计时器再次运行并加载包含数据的页面。一旦完成,UpdateProgress1就会消失。

Page_Load()

if (!IsPostBack)
{
 TimerRefresh.Enabled = true;
}

TimerRefresh_Tick(object sender, EventArgs e)

TimerRefresh.Enabled = false;
codeToLoadDate();

.aspx

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdateProgress ID="UpdateProgress1" runat="server" DisplayAfter="10">
    <ProgressTemplate>
        <div id="updatestatus" class="shadow">
        <asp:Label ID="Label12" runat="server" Text="Loading...">
        </asp:Label>
        <asp:Image ID="Image1"
        runat="server" ImageUrl="~/images/1status.png" />
        </div>
    </ProgressTemplate>
</asp:UpdateProgress>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:Timer ID="TimerRefresh" runat="server" Interval="100" 
         ontick="TimerRefresh_Tick" Enabled="False">
    <%-- My page loading stuff - controls that would hold data -->
    </ContentTemplate>
</asp:UpdatePanel>