显示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 message2: 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 dalay5: 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: 点击这儿下载完整示例代码
浙公网安备 33010602011771号