2011-11-18 42 views
0

我有一個頁面有問題,我有。該頁面用於顯示性能統計信息。它有一個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> 

回答

2

我建議你使用AJAX來加載報告異步。通過這種方式,您的頁面加載速度很快,用戶可以與其交互,然後加載報告而不會阻止用戶

但是,我有一個解釋讓你知道爲什麼用戶看不到你的情況。 AMAIK,當用戶訪問您的頁面時,他/她的瀏覽器會向您的頁面發送HTTP請求,這意味着您的服務器會響應發送HTML文檔(在本例中)或任何其他Internet媒體類型(MIME類型),如要下載的文件,CSS文件,圖像等。

然後瀏覽器開始下載服務器的響應。然而,大多數瀏覽器都不會顯示文檔,直到它完成(我不知道流式傳輸是多少,哪些瀏覽器獲得大量數據,然後顯示它,然後顯示它,然後再顯示它,等等上)。

這意味着,當您的網格從數據庫加載數據時,發送回用戶的HTML數據不完整,因此瀏覽器無法呈現它,因此用戶看到空白頁面。

另外你應該注意到,在HTTP請求中下載的所有東西同步下載,也就是說,它們阻止用戶使用網頁,而他們正在下載。例如,如果您的網頁包含10個大圖像,則通常無法與頁面交互,而下載這些圖像。

你試圖做的,是在數據庫的記錄叫儀表盤一個概念,其中很多報道是由數百萬(或數十億)聚集在一起的必需品。儀表板需要很長時間才能獲取數據。因此,顯示儀表板的常見做法是將簡單頁面發送給包含許多佔位符的用戶,然後使用AJAX技術異步加載這些佔位符的內容

+0

謝謝你的回答。 – EPetson

+0

我是否需要重新設計整個事物,還是有一種簡單的方法來添加異步? – EPetson