让用户知道页面正在加载

时间:2011-11-18 13:07:23

标签: asp.net gridview

我的网页有问题。该页面用于显示性能统计信息。 它有一个gridview并使用MySql服务器数据源。加载页面时,填充页面的查询大约需要30秒到2分钟。在此期间,用户看到一个白色的空白页面。有没有办法加载母版页并向用户显示页面正在加载?

这是页面代码:

<%@ Page Title="BSC1" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="BSC1_all.aspx.cs" Inherits="Estat.BSC1.BSC1_all" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
        <h2>BSC1 Allar Cellur</h2>
        <h2 align="center">
            <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></h2><br />
<asp:GridView ID="GridView1" runat="server" AllowSorting="True" 
    AutoGenerateColumns="False" DataKeyNames="cell" DataSourceID="gull_bsc1" 
    HorizontalAlign="Center" CellPadding="3">
    <AlternatingRowStyle BackColor="#EEEEEE" />
    <Columns>
        <asp:TemplateField HeaderText="Cella" SortExpression="cell" FooterText="Cella">
            <EditItemTemplate>
                <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("cell") %>'>  </asp:TextBox>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:HyperLink ID="HyperLink1" runat="server" 
                    NavigateUrl='<%# Eval("cell","http://intra/OneCellBSC1/OneCellBSC1.aspx?cell={0}") %>'
                    Target="_blank"><%# Eval("cell") %></asp:HyperLink>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="ph_traffic" HeaderText="PH Traffic" 
            SortExpression="ph_traffic" FooterText="PH Traffic" />
        <asp:BoundField DataField="ph_fravisun" HeaderText="PH Frávísanir" 
            SortExpression="ph_fravisun" FooterText="PH Frávísanir" />
        <asp:BoundField DataField="ph_slit" HeaderText="PH Slit" 
            SortExpression="ph_slit" FooterText="PH Slit" />
        <asp:BoundField DataField="avg_traffic" HeaderText="Meðaltals Traffic" 
            SortExpression="avg_traffic" FooterText="Meðaltals Traffic" />
        <asp:BoundField DataField="sum_fravisun" HeaderText="Samtals Frávísanir" 
            SortExpression="sum_fravisun" FooterText="Samtals Frávísanir" />
        <asp:BoundField DataField="sum_slit" HeaderText="Samtals Slit" 
            SortExpression="sum_slit" FooterText="Samtals Slit" />
    </Columns>
</asp:GridView>
<asp:SqlDataSource ID="gull_bsc1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:gull_agg_bsc1 %>" 
    ProviderName="<%$ ConnectionStrings:gull_agg_bsc1.ProviderName %>" 

    SelectCommand="SELECT cell, ph_traffic, ph_fravisun, ph_slit, avg_traffic, sum_fravisun, sum_slit FROM bsc1_aggregete_cell_to_day WHERE timi_tolfraedi LIKE DATE_SUB(CURDATE(),INTERVAL 1 DAY)" 
    CacheDuration="86400" EnableCaching="True">
</asp:SqlDataSource>

1 个答案:

答案 0 :(得分:2)

我建议您使用AJAX加载报告异步。这样,您的网页加载速度很快,用户就可以与其进行互动,然后报告就会加载而不会阻止用户。

但是,我有一个解释,让您知道为什么用户在您的情况下看不到任何内容。 AMAIK,当用户访问您的页面时,他/她的浏览器会向您的页面发送HTTP请求,这意味着您的服务器作为响应发送HTML文档(在这种情况下)或任何其他Internet媒体类型(MIME类型),如要下载的文件,CSS文件,图像等。

浏览器然后开始下载服务器的响应。但是,大多数浏览器都不会显示文档,直到它完成(我不知道流式传输,浏览器获取数据并显示回来,然后是另一个块) ,并显示它,等等。)

这意味着,当您的网格从数据库加载数据时,发送回用户的HTML数据不完整,因此浏览器无法呈现它,因此用户看到空白页面。

另外,您应该注意到,在HTTP请求中下载的所有内容都是同步下载的,也就是说,它们会阻止用户使用网页,而他们会被下载。例如,如果您有一个包含10个大图像的网页,您通常无法与页面进行交互,而这些图像会被下载。

您尝试做的事情,在名为信息中心的概念中是必需的,其中许多报告是从数百万(或数十亿)的数据库记录中收集在一起的。仪表板需要很长时间才能获取数据。因此,显示仪表板的常见做法是向用户发送一个简单页面,其中包含许多占位符,然后使用AJAX技术加载异步这些占位符的内容。

相关问题