none
Fenêtre Veuillez Patientez en cliquant sur un item d'un menu...(Pas de Windows Form) RRS feed

  • Question

  • Allo,

    J'en suis à mes premiers pas en C#. Un stagiaire a debuté en programme mais maintenant je dois l'améliorer.

    Pour faire une histoire courte: Il a créé une page PageMaster.master qui contient un menu déroulant avec hyperlien.

    Une des options du menu permet de faire afficher une page aspx qui liste une groupe d'usager provenant de l'active directory. La requête prend un bon 20 secondes a apparaître et évidement, pendant que la requête roule, on dirait que rien ne se passe. Je voulais faire apparaître une fenêtre veuillez patientez......

    Je n'ai pas de Windows Form. Tout le programme a été créé avec Visual Studio 2010. Je n'ai plus les fichiers originaux, uniquement les fichier aspx et aspx.cs

    Pour ma boîte veuillez pateitnez, sur Internet on parle de thread, de ajax toolkit, ...

    J'aimerais seulement qu'en cliquant sur le lien du menu, qu'une page apparaisse (Veuillez patientez) et qu'elle se referme quand la requete à fini de rouler.

    Je croyais placer l'ouverture de la fenêtre dans le Page_Load de ma page Liste_usager.aspx et la faire fermer quand la requête est terminé.

    J'ai vraiment l'impression de ne rien avoir compris!

    Est-ce que vous pouvez m'aider?

    Merci!!
    jeudi 15 septembre 2011 19:18

Réponses

Toutes les réponses

  • Bonjour,

    Pour cela, regardez dans un premier temps du côté du composant : UpdateProgress

    http://msdn.microsoft.com/fr-fr/library/system.web.ui.updateprogress.aspx

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    • Proposé comme réponse Michel K dimanche 18 septembre 2011 11:54
    • Marqué comme réponse Ciprian Duduiala jeudi 22 septembre 2011 06:12
    jeudi 15 septembre 2011 20:16
    Modérateur
  • Bonjour

    Je confirme ce que Gilles a réclamé a propos le updateprogress .vous pouvez l'ajouter avec une image animé et faire un sleep niveau code behind 

     

    <asp:UpdateProgress ID="UpdateProgress1" runat="server" >
                <ProgressTemplate>
                    &nbsp;<img src="images/loadingAnim.gif"  style="Z-INDEX: 110; LEFT: 400px; POSITION: absolute; TOP: 300px"/>
                </ProgressTemplate>
            </asp:UpdateProgress>
    


    et au niveau du code behind tu ajoute au bon endroit un sleep si c 'est pas assez long

    System.Threading.Thread.Sleep(3000)

    3000 c 3 seconde 

    Cordialement


    Best Regards...Please mark as answer if my post is helpful
    • Proposé comme réponse Michel K dimanche 18 septembre 2011 11:54
    vendredi 16 septembre 2011 07:10
  • Bonjour Kadionne,

    Avant d'ajouter la fenêtre "Veuillez patienter", j'effectuerais un profiling à votre place pour comprendre pourquoi la requête prend du temps. Pour cela, vous pouvez utiliser DotTrace.

    Pour ajouter la fenêtre "Veuillez patienter", comme Gilles a indiqué, il faut utiliser le composant UpdateProgress. Si vous n'avez jamais utilisé ce composant, lisez la documenation et faîtes un projet de test ou vous mettez le code de l'exemple dans la page de documentation (cf. lien de Gilles). Si vous voulez mettre une animation de progression, voici http://www.ajaxload.info/ qui vous permettra de  générer des gif en fonction de vos besoins. Si vous voulez afficher un message dans un popup au milieu de la page avec un arrière-plan grisé, il faut que vous fassiez le css correspondant.


    aelassas.free.fr
    • Proposé comme réponse Michel K dimanche 18 septembre 2011 11:54
    vendredi 16 septembre 2011 08:34
    Auteur de réponse
  • Merci beaucoup pour votre aide!! Je vais lire cela attentivement!

    vendredi 16 septembre 2011 13:26
  • Bonjour, Kdionne,

    Est-ce que vous avez testé les solutions proposées ? Merci de partager avec nous les résultats, afin que d'autres personnes avec le même problème puissent profiter de cette solution.

     

    Cordialement,

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    lundi 19 septembre 2011 06:23
  • Bonjour,

     

    J'ai bien lu les exemple fournis mais j'ai encore bien de la difficulté à tout saisir.

    Je comprends un peu mieux les principes de UpdatePanel et UpdateProgress. Par contre, je ne sais pas où je dois placer le code.

    Je vous explique: J'ai une master page qui contient les menus de navigation entre les différentes pages du logiciel:

     

    <%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <link href="~/css/StyleMaster.css" rel="stylesheet" type="text/css" />
        <link rel="stylesheet" type="text/css" media="print" href="~/css/print.css" />
    
        <asp:ContentPlaceHolder id="head" runat="server">
        </asp:ContentPlaceHolder>
    </head>
    <body>
        <form id="form1" runat="server">
        <div id="divPrincipal">
            <div id="bandeau">
                <div id="logo"><img src="img/logo.jpg" alt="Logo"height="100px" width="200px"/></div>
                <div id="titre">
                    <table style="height: 100px; width: 757px">
                        <tr>
                            <td valign="middle" class="style1" >
                                <h1>Gestion</h1>
                            </td>
                        </tr>
                    </table> 
                </div>
            </div>
            <div id="divMenu">
                <ul id="menu">
                    <li>
                        <a href="Default.aspx">Accueil</a>
                    </li>
                    <li>
                        <a href="Clients.aspx">Clients</a>
                        <ul>
                            <li><a href="Clients.aspx">Liste</a></li>
                            <li><a href="CreationCompte.aspx">Ajout</a></li>
                         </ul>
                    </li>
                    <li>
                        <a href="Rapports.aspx">Rapports</a>
                        <ul>
                            <li><a href="Rapports.aspx">Utilisateurs </a></li>
                        </ul>
                    </li>
                    <li>
                        <a href="EtatOperation.aspx">État des opérations</a>
                        <ul>
                            <li><a href="EtatOperation.aspx">Nombre d'usager connectés</a></li>
                            <li><a href="EtatOperation.aspx">Équipement fonctionnel</a></li>
                        </ul>
                    </li>
                    <li id="historique">
                        <a href="Historique.aspx">Historique</a>
                    </li>
                </ul>
            </div>
            <div id="contenu">
                <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">  
                </asp:ContentPlaceHolder>
            </div>
        </div>
        </form>
    </body>      
    </html>
    

    L'interface qui prend du temps à afficher est le:

    <li><a href="Clients.aspx">Liste</a></li>

    Je croyais donc que le code devait être placé en entier sur ma page Master.. et placer un événement onclick sur mon <href ....>

    Est-ce que je suis correcte?

     

     

    lundi 19 septembre 2011 15:57
  • Bonjour,

    Dans votre cas, c'est le chargement de la page qui prend du temps, dans ce cas, l'UpdatePanel et l'UpdateProgress seront placés dans la page Details.aspx.

    Je vous invite à voire ce poste.

    Cordialement;



    aelassas.free.fr
    lundi 19 septembre 2011 16:29
    Auteur de réponse
  • Bonjour,

     

    vous voulez que l'attente soit faite en cliquant sur le menu mais votre menu est dans la masterpage .

    le meilleur est de mettre le code de ton menu dans un updatepanel mais ton div ne passera pas car le div n'est pas un membre de updatepanel (si vous voulez utilisez une autre facon de créer votre menu)

    voici un exemple qui utilise un javascript 

    http://www.codeproject.com/KB/ajax/ASPNETAJAXPageLoader.aspx?display=Print

    telecharge le code et place la méthode notify au bon endroit dans ta masterpage ca devrait marcher 

    en voici un autre 

    http://www.aspsnippets.com/Articles/Delay-Load-Lazy-Load-UpdatePanel-using-Timer-Control-in-ASP.Net.aspx

     

     

     


    Best Regards...Please mark as answer if my post is helpful
    mardi 20 septembre 2011 07:59