1

我有一个非常大的页面,需要一些时间来提取数据和加载。当第一次导航到 .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 可见状态,但这仍然不起作用。网格视图永远不会出现。

有趣的是,如果我在页面上放一个按钮来执行以下操作,

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

}

我可以单击它并隐藏和显示 GridView 任意多次,没有问题。为什么计时器有什么不同?

4

1 回答 1

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>
于 2014-03-28T16:09:51.683 回答