显示ASP.NET页面装载进度

ASP.NET的web应用越做越大,即便用了AJAX也是要装载很多JS或者外部框架,导致大型应用启动装载很慢。这儿演示了一个类似Splasher的显示ASP.NET页面装载进度的方法。只要继承LoadingNotifier,调用几个JS方法即可。

LoadingNotifier.cs
   1: using System;
   2: using System.Data;
   3: using System.Configuration;
   4: using System.Web;
   5: using System.Web.Security;
   6: using System.Web.UI;
   7: using System.Web.UI.WebControls;
   8: using System.Web.UI.WebControls.WebParts;
   9: using System.Web.UI.HtmlControls;
  10:  
  11: namespace WebApplication1
  12: {
  13:     public class LoadingNotifier : System.Web.UI.Page
  14:     {
  15:         public void initNotify(string StrSplash)
  16:         {
  17:             // Only do this on the first call to the page
  18:             if ((!IsCallback) && (!IsPostBack))
  19:             {
  20:                 //Register loadingNotifier.js for showing the Progress Bar
  21:                 Response.Write(string.Format(@"<script type='text/javascript' src='scripts/loadingNotifier.js'></script>
  22:               <script language='javascript' type='text/javascript'>
  23:               initLoader('{0}');
  24:               </script>", StrSplash));
  25:                 // Send it to the client
  26:                 Response.Flush();
  27:             }
  28:         }
  29:         public void Notify(string strPercent, string strMessage)
  30:         {
  31:             // Only do this on the first call to the page
  32:             if ((!IsCallback) && (!IsPostBack))
  33:             {
  34:                 //Update the Progress bar
  35:                 Response.Write(string.Format("<script language='javascript' type='text/javascript'>setProgress({0},'{1}'); </script>", strPercent, strMessage));
  36:                 Response.Flush();
  37:             }
  38:         }
  39:     }
  40:  
  41: }
  42:  
loadingNotifier.js
   1: var initProgressPanel=false;
   2: var prgCounter=0;
   3: var strLoadingMessage ='Loading...';
   4:  
   5:  function initLoader(strSplash)
   6:  {
   7:     if (strSplash) strLoadingMessage =strSplash;
   8:  
   9:     var myNewObj= document.getElementById('divContainer');
  10:     if (!myNewObj )
  11:     {
  12:  
  13:     strID='divContainer';
  14:  
  15:     strClass='divContainer';
  16:  
  17:            myNewObj =  createNewDiv( strID,strClass);
  18:  
  19:            document.body.appendChild(myNewObj);
  20:  
  21:      }
  22:    
  23:      var myNewObj= document.getElementById('divLoadingStat');
  24:  
  25:      if (!myNewObj )
  26:      {
  27:             strID='divLoadingStat';  
  28:  
  29:             strClass='divLoadingStat';
  30:  
  31:             myNewObj =  createNewDiv( strID,strClass);        
  32:  
  33:             var mytext=document.createTextNode(strLoadingMessage);
  34:  
  35:             myNewObj.appendChild(mytext);
  36:  
  37:             document.getElementById('divContainer').appendChild(myNewObj);
  38:         }
  39:     var myNewObj= document.getElementById('divLoaderBack');
  40:  
  41:     if (!myNewObj )
  42:     {
  43:             strID='divLoaderBack';
  44:  
  45:             strClass='divLoaderBack';
  46:  
  47:              myNewObj =  createNewDiv( strID,strClass);
  48:  
  49:             document.getElementById('divContainer').appendChild(myNewObj);
  50:  
  51:      }
  52:  
  53:      var myNewObj= document.getElementById('divLoaderProgress');
  54:  
  55:      if (!myNewObj )
  56:  
  57:         {
  58:  
  59:             strID='divLoaderProgress';
  60:  
  61:             strClass='divLoaderProgress'
  62:  
  63:             myNewObj =  createNewDiv( strID,strClass);
  64:  
  65:             document.getElementById('divLoaderBack').appendChild(myNewObj);
  66:  
  67:         }
  68:  
  69:         initProgressPanel=true;
  70:  
  71:      }
  72:  
  73:  
  74:        function setProgress(intPrc,strMessage)
  75:   {
  76:        if (!initProgressPanel) initLoader('Loading...');
  77:  
  78:       if (strMessage)  strLoadingMessage=strMessage;
  79:  
  80:       if(!intPrc) return
  81:  
  82:       var mytext=document.createTextNode( strLoadingMessage+' ' + prgCounter +'%');
  83:  
  84:       var lodStat= document.getElementById('divLoadingStat');
  85:  
  86:           lodStat.removeChild(lodStat.lastChild );
  87:  
  88:           lodStat.appendChild(mytext);
  89:  
  90:           prgCounter++;
  91:  
  92:           prgDiv= document.getElementById('divLoaderProgress');
  93:  
  94:            prgDiv.style.width=prgCounter*5+'px';
  95:  
  96:        if (prgCounter<=intPrc) 
  97:  
  98:            {
  99:  
 100:                 setTimeout( 'setProgress('+intPrc+')',0.1);
 101:  
 102:             }
 103:  
 104:             else if(prgCounter>100)
 105:  
 106:             {
 107:  
 108:                  completed();
 109:  
 110:             }
 111:    }
 112:  
 113: function completed()
 114:  
 115: {
 116:  
 117:   document.body.removeChild(document.getElementById('divContainer'));
 118:  
 119: }
 120:  
 121:         function createNewDiv()
 122:  
 123:         {
 124:  
 125:             newDiv = document.createElement('div');
 126:  
 127:             newDiv.id=strID;
 128:  
 129:             var styleCollection = newDiv.style;
 130:  
 131:             newDiv.className=strClass;
 132:  
 133:             return newDiv;
 134:  
 135:  
 136:  
 137:         }
 138:  
 139:    function resetProgress()
 140:  
 141:      {
 142:  
 143:             prgCounter=0;
 144:  
 145:              strLoadingMessage ='Loading...';
 146:  
 147:      }
 148:  
Default.aspx
   1: <%@ Page Language="C#" Inherits="WebApplication1._Default" %>
   2: <%
   1:  
   2:     //Page Inhertits the LoadNotifier Class 
%>
   3: <!DOCTYPE html >
   4: <html>
   5: <head id="Head1" runat="server">
   6:     <title>Sample WebApplication</title>
   7: </head>
   8: <body style="background-color: #999999; font-size: 10px; font-family: Verdana, Arial, Helvetica, sans-serif;">
   9:     <%
   1:  //Initilize thr Progress Bar and show a message
   2:         initNotify("Welcome to Sample Loading Splasher WebApplication.");
   3:         System.Threading.Thread.Sleep(3000);
   4:     
%>
  10:     <form id="form1" runat="server">
  11:         <span style="font-size: 12pt"><strong><span style="color: #ffffff">Select Your Departure
  12:             Date: </span></strong> </span>
  13:         <asp:Calendar ID="Calendar1" runat="server"></asp:Calendar>
  14:         <br />
  15:         <%
   1:  
   2:             // We have achieved a milestone. Let the user know!
   3:             Notify("30", "Loading Departure Calendar Completed ...");
   4:             // Simulate Internet dalay
   5:            System.Threading.Thread.Sleep(2000);
   6:         
%>
  16:         <span style="font-size: 12pt"><span style="color: #ffffff"><strong>Select Your Return
  17:             Date: </strong><span style="color: #000000"> </span></span></span>
  18:         <asp:Calendar ID="Calendar2" runat="server"></asp:Calendar>
  19:         <br />
  20:            <%
   1:  
   2:              Notify("60", "Loading data ...");
   3:              System.Threading.Thread.Sleep(2000);
   4:            
%>
  21:                <span style="font-size: 14pt"><span style="color: #ffffff">Your Recent Flights:</span><strong><span
  22:             style="color: #ffffff"> </span></strong></span>  <br />
  23:         <span style="font-size: 12pt"><span style="color: #ffffff"></span>
  24:  
  25:         </span>
  26:         <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4"
  27:             DataSourceID="XmlDataSource" ForeColor="#333333" GridLines="None" Style="border-left-color: gray;
  28:             border-bottom-color: gray; border-top-style: outset; border-top-color: gray;
  29:             border-right-style: outset; border-left-style: outset; border-right-color: gray;
  30:             border-bottom-style: outset">
  31:             <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
  32:             <Columns>
  33:  
  34:                 <asp:BoundField DataField="id" HeaderText="id" SortExpression="id" />
  35:  
  36:                 <asp:BoundField DataField="Origin" HeaderText="Origin" SortExpression="Origin" />
  37:  
  38:                 <asp:BoundField DataField="Destination" HeaderText="Destination" SortExpression="Destination" />
  39:  
  40:                 <asp:BoundField DataField="Duration" HeaderText="Duration" SortExpression="Duration" />
  41:  
  42:                 <asp:BoundField DataField="Price" HeaderText="Price" SortExpression="Price" />
  43:  
  44:             </Columns>
  45:  
  46:             <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
  47:  
  48:             <EditRowStyle BackColor="#999999" />
  49:  
  50:             <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
  51:  
  52:             <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
  53:  
  54:             <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
  55:  
  56:             <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
  57:  
  58:         </asp:GridView>
  59:  
  60:         <asp:XmlDataSource ID="XmlDataSource" runat="server" DataFile="~/Source.xml" XPath="/travel/Itinerary">
  61:  
  62:         </asp:XmlDataSource>
  63:  
  64:         <%
   1:  
   2:  
   3:             Notify("100", "Loading Your Previous Trips Completed.");
   4:  
   5:           System.Threading.Thread.Sleep(1000);
   6:          
%>
  65:     </form>
  66: </body>
  67: </html>
  68:  
点击这儿下载完整示例代码

posted on 2009-03-24 15:17  Mainz  阅读(1036)  评论(4编辑  收藏  举报

导航