OVH Cloud OVH Cloud

Réaliser une page d'attente ou....

3 réponses
Avatar
Sylvain
Bonjour à tous,

J'ai certain processus dans mon site web qui prenne beaucoup de temps.
C'est pourquoi je souhaitais réaliser une page d'attente vers laquelle
l'utilisateur serait rediriger en attendant.
Une fois le processus terminer, il reviendrait automatiquement dans la page
d'ou il a lancer le processus.

Est ce quelqu'un saurait comment faire cela ?

Merci d'avance.

3 réponses

Avatar
Rescal
En utilisant un IFrame masqué (ici Iasync) dans une fenêtre modale avec le
message d'attente et une petite animation
qui va bien :

public class async : System.Web.UI.Page
{
protected System.Web.UI.HtmlControls.HtmlGenericControl Iasync;

private void Page_Load(object sender, System.EventArgs e)
{
if( !IsPostBack )
Iasync.Attributes["src"] Server.UrlDecode(Request.QueryString["src"]);
}
}
---------------------------------------------------------------------------
<script language="jscript">
document.all("Iasync").onreadystatechange = ASPNET__onreadystatechange;
function ASPNET__onreadystatechange()
{
if(document.all("Iasync").readyState == "complete")
{
window.returnValue = true;
window.close();
}
}
</script>

"Sylvain" a écrit dans le message de
news:
Bonjour à tous,

J'ai certain processus dans mon site web qui prenne beaucoup de temps.
C'est pourquoi je souhaitais réaliser une page d'attente vers laquelle
l'utilisateur serait rediriger en attendant.
Une fois le processus terminer, il reviendrait automatiquement dans la


page
d'ou il a lancer le processus.

Est ce quelqu'un saurait comment faire cela ?

Merci d'avance.


Avatar
Sylvain
Salut Rescal,

Pourrais tu me donner plus de détail car je ne sais pas par ou commencer.

Merci

"Rescal" wrote:

En utilisant un IFrame masqué (ici Iasync) dans une fenêtre modale avec le
message d'attente et une petite animation
qui va bien :

public class async : System.Web.UI.Page
{
protected System.Web.UI.HtmlControls.HtmlGenericControl Iasync;

private void Page_Load(object sender, System.EventArgs e)
{
if( !IsPostBack )
Iasync.Attributes["src"] > Server.UrlDecode(Request.QueryString["src"]);
}
}
---------------------------------------------------------------------------
<script language="jscript">
document.all("Iasync").onreadystatechange = ASPNET__onreadystatechange;
function ASPNET__onreadystatechange()
{
if(document.all("Iasync").readyState == "complete")
{
window.returnValue = true;
window.close();
}
}
</script>

"Sylvain" a écrit dans le message de
news:
> Bonjour à tous,
>
> J'ai certain processus dans mon site web qui prenne beaucoup de temps.
> C'est pourquoi je souhaitais réaliser une page d'attente vers laquelle
> l'utilisateur serait rediriger en attendant.
> Une fois le processus terminer, il reviendrait automatiquement dans la
page
> d'ou il a lancer le processus.
>
> Est ce quelqu'un saurait comment faire cela ?
>
> Merci d'avance.





Avatar
Rescal
Méthode :
/Async.aspx : Formulaire d'attente ici placé à la racine car utilisé par
plusieurs applications)
/Progical.js : bibliothèque de scripts commune à l'ensemble du site
/tests/test.aspx : Formulaire de test (hôte)
/tests/async.aspx : Formulaire travaillant en arrière plan
donc (il faut suivre :-) :
j'ai "/tests/test.aspx" qui va afficher ma fenêtre d'attente
"/async.aspx" et "/test/async.aspx" qui correspond à mon traitement en
arrière plan est masquée dans "/async.aspx"

Bon ca a l'air un peu lourd comme ca, mais c'est pour avoir un maximum
d'ouverture et de possibilité de réutilisation.

Voici le code utilisé
====================================================================== /ASYNC.ASPX
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<iframe id="Iasync" style="DISPLAY: none; Z-INDEX: 101; LEFT: 11px;
POSITION: absolute; TOP: 70px" src="" width="90%" height="50%"
runat="server">
</iframe><IMG style="Z-INDEX: 102; LEFT: 13px; POSITION: absolute; TOP:
20px" alt="" src="/progical.net/graphics/requete.gif">
<DIV class="stdx" style="DISPLAY: inline; Z-INDEX: 103; LEFT: 89px;
WIDTH: 297px; POSITION: absolute; TOP: 26px; HEIGHT: 37px"
ms_positioning="FlowLayout">Veuillez
patienter pendant le traitement de votre requête ...</DIV>
</form>
<script language="jscript">
window.dialogWidth = "400px";
window.dialogHeight = "125px";
document.all("Iasync").onreadystatechange = ASPNET__onreadystatechange;
function ASPNET__onreadystatechange()
{
if(document.all("Iasync").readyState == "complete")
{
window.returnValue = true;
window.close();
}
}
</script>
</body>
============================================================= /ASYNC.ASPX.CS
public class async : System.Web.UI.Page
{
protected System.Web.UI.HtmlControls.HtmlGenericControl Iasync;

private void Page_Load(object sender, System.EventArgs e)
{
if( !IsPostBack )
Iasync.Attributes["src"] Server.UrlDecode(Request.QueryString["src"]);
}
}
============================================================= /PROGICAL.JS (reduit au nécessaire pour l'exemple)

function async(url)
{
return window.showModalDialog("/progical.net/async.aspx?src=" +
urlEncode(urlComplete(url)), null, "resizable:yes;scroll:no;status:no");
}

/*-----------------------------------------------
Retourne une url complete (avec le chemin du
document en cours).
-----------------------------------------------*/
function urlComplete(url)
{
var h = document.location.pathname;
h = h.substring(0, h.lastIndexOf('/') + 1);
h += url;
return h;
}

function urlEncode(s)
{
return escape(s).replace(/%/g, "%u00");
}
============================================================= /TEST/TEST.ASPX.CS

//un tout petit bout de code de la page. En clair, j'écris un script
appelant la méthode async (donc mon fichier test.aspx doit faire référence à
progical.js).
//je passe en argument ma page (elle s'appelle également async.aspx mais
dans l'application en cours a savoir /test) et dispose elle même d'arguments
//afin de regrouper dans une seule page tous les traitements en arrière plan
de mon application.
//si la fonction renvoie une valeur, c'est ok. Pour l'exemple j'active un
bouton.
private void lbCloturer_Click(object sender, System.EventArgs e)
{
lbCloturer.Enabled = false;
string Script = string.Format("if (async('async.aspx?{0}={1}') ! undefined)", Global.async.QS_ACTION, Global.async.ACTION_CLOTURE)
Script += "n Form1.btnTerminer.disabled = false;";
RegisterStartupScript("key", Script);
}
============================================================= /TEST/ASYNC.ASPX.CS

public class async : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
if (! IsPostBack)
{
//...
switch(Request.QueryString[Global.async.QS_ACTION])
{
case Global.async.ACTION_CLOTURE:
//[...]
break;
case Global.async.ACTION_PREPARE:
//[...]
break;
//[...]
}
}
}
}

"Sylvain" a écrit dans le message de
news:
Salut Rescal,

Pourrais tu me donner plus de détail car je ne sais pas par ou commencer.

Merci

"Rescal" wrote:

> En utilisant un IFrame masqué (ici Iasync) dans une fenêtre modale avec


le
> message d'attente et une petite animation
> qui va bien :
>
> public class async : System.Web.UI.Page
> {
> protected System.Web.UI.HtmlControls.HtmlGenericControl Iasync;
>
> private void Page_Load(object sender, System.EventArgs e)
> {
> if( !IsPostBack )
> Iasync.Attributes["src"] > > Server.UrlDecode(Request.QueryString["src"]);
> }
> }

--------------------------------------------------------------------------


-
> <script language="jscript">
> document.all("Iasync").onreadystatechange ASPNET__onreadystatechange;
> function ASPNET__onreadystatechange()
> {
> if(document.all("Iasync").readyState == "complete")
> {
> window.returnValue = true;
> window.close();
> }
> }
> </script>
>
> "Sylvain" a écrit dans le message de
> news:
> > Bonjour à tous,
> >
> > J'ai certain processus dans mon site web qui prenne beaucoup de temps.
> > C'est pourquoi je souhaitais réaliser une page d'attente vers laquelle
> > l'utilisateur serait rediriger en attendant.
> > Une fois le processus terminer, il reviendrait automatiquement dans la
> page
> > d'ou il a lancer le processus.
> >
> > Est ce quelqu'un saurait comment faire cela ?
> >
> > Merci d'avance.
>
>
>