esempi e tutorial

INSERIRE MESSAGGIO DI ATTESA (LOADING) IN PAGINE ASPX

A volte il caricamento di una pagina non è immediato, ci possono essere problemi di connessione o elaborazioni lato server "pesanti", in questi casi potrebbe essere utile avvisare il visitatore che la pagina è in fase di caricamento, in pratica inserire un loading così come siamo abituati a vederlo nei filmati in flash (anche se meno elaborato). Girando per la rete ho trovato degli esempi (in javascript ed in VB.Net/C#) che permettono di inserire il famoso messaggio "loading...please" nelle pagine che non contengono filmati .swf, ma in tutti i casi (o meglio... in tutti i casi che io ho trovato) tali esempi prevedevano l'inserimento di codice in tutte le pagine in cui si voleva mettere il loading.
A me serviva poter inserire il messaggio di attesa anche in lavori già fatti e già on-line, per cui la prospettiva di dover mettere mano a tutte le pagine non mi allettava...
Partendo da questo presupposto mi sono creato un sistema per fare questo inserimento agendo su di un solo file per ogni progetto: il global.asax.
Il file global.asax è in grado di intercettare tutte le richieste della catena pipeline HTTP di esecuzione in risposta a una richiesta inoltrata ad ASP.NET ma per la mia esigenza ho utilizzato solo la prima e l'ultima, ovvero BeginRequest ed EndRequest.
Quindi l'unico intervento verrà fatto sul file in questione ed avrà effetto su tutte le pagine .aspx (e solo su quelle). Nell'esempio che ora vado ad illustrare ho inserito, oltre al testo "attendere... caricamento pagina", anche una gif animata che dovrà trovarsi in una cartella nominata "images", ma nulla impedisce di toglierla od usarne un'altra. Ma dopo tante chiacchere ecco il codice.

Prima parte:

Sub Application_OnBeginRequest(ByVal sender As Object, ByVal e As EventArgs)
Dim context As HttpContext = HttpContext.Current
Dim str As String
str = "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>"& VbCrLf
str = str & "<div align='center' id='dvvvPre' style='position:absolute; background-color:#ffffff; text-align:center; width:200px; height:100px; top:200px; left:400px; z-index:10; border:1px dashed #660000;"
str = str & "font:verdana; font-size:10px;'><br><img src='images/load.gif' alt='loding please' ><br>loading please..."
str = str & "<"& "/div>"
If Response.StatusDescription <> "OK" Then
context.response.write("errore")
Else
context.response.write(str)
End If
End Sub

Questa sub viene sempre eseguita per prima ad ogni richiesta di pagina .aspx, quindi con
Dim context As HttpContext = HttpContext.Current
recupero la richiesta corrente, dopodiche con context.response.write(str) scrivo sulla pagina richiesta.
La stringa che vado ad inserire nella pagina contiene il div che al suo interno ha la gif animata e la scritta di attesa.

Seconda parte:

Sub Application_EndRequest(Sender As Object, E As EventArgs)
Dim str2 As String
str2 = "<script language='javascript' type='text/javascript'>document.getElementById('dvvvPre').style.visibility='hidden';</" & "script>"
Dim context As HttpContext = HttpContext.Current
If Response.StatusDescription <> "OK" Then
context.response.write("errore")
Else
context.response.write(str2)
End If
End Sub

Questa sub viene sempre eseguita alla fine ogni elaborazione di pagina .aspx e, come è facilmente intuibile, si occupa di rendere invisibile il div con il messaggio di caricamento, inserendo nella pagina richiesta (con lo stesso procedimento descritto nella prima parte) uno javascript che setta la visibilità del div a "hidden".
Sarà quindi sufficiente inserire il codice (potete aprire una pagina per il "copia/incolla" con il link sottostante) nel file global.asax. Se non avete il global copiate tutto il codice, incollatelo in un qualsiasi editor (anche il blocco note) e salvatelo come "global.asax" nella root del vostro sito, se invece avete già questo file, copiatevi solo le due sub.

visualizza codice completo per copia/incolla