IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Recharger la page sans la recharger


Sujet :

ASP.NET

  1. #1
    Membre éclairé Avatar de Stephane_br
    Inscrit en
    Septembre 2005
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 222
    Par défaut Recharger la page sans la recharger
    Bonjour,

    Je travaille sur un site marchand et je voudrais savoir si il est possible de recharger une page sans perdre les données du Page.PreviousPage ?
    Je m'explique :


    J'ai une page1.aspx avec un formulaire contenant un TextBox et plusieurs RadioButton + un bouton de validation déclaré comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <asp:ImageButton ID="BtImgValider" runat="server" PostBackUrl="~/page2.aspx" ImageUrl="~/photos/BtValider.gif" title="Valider les informations de cette page">
    </asp:ImageButton>
    -------------------------------------------------------------------------------------------

    La page2.aspx récupère mes valeurs comme ceci et affiche un montant total à payer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Not IsPostBack AND NOT Page.PreviousPage Is Nothing  Then
       Dim RadioButtonMode As RadioButton = CType(Page.PreviousPage.Master.FindControl("ContenuPage").FindControl("RadioButton1"), RadioButton)
       ...etc...
    End If
    Jusque là tout va bien.

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

    Maintenant, je voudrais rajouter un formulaire sur ma page2.aspx pour faire ceci :

    > ma page2.aspx affiche un montant total pour une commande calculé à partir des éléments de la page précédente;
    > Sur cette page, mes internautes doivent pouvoir saisir un code promotion;
    > Ils cliquent sur un bouton et je veux alors pouvoir vérifier si le code promo est valide;
    > Si le code promo est valide, je dois recalculer la réduction et donc modifier le montant total sur ma page2.aspx

    Seulement, si je ne vois pas comment faire cela.
    J'ai essayé plusieurs choses, mais si je met un ImageButton par exemple pour valider le code saisi sur la page2.aspx, ceci me recharge la page2.aspx et je perds les valeurs saisies sur le formulaire de ma page1.aspx.

    Est-il possible d'exécuter du code côté serveur et de rappeler la page2.aspx dans l'état où elle était, tout en pouvant lui appliquer des modifications ?

    Je ne sais pas si je suis clair ?
    Merci d'avance pour toute l'aide que vous pourrez m'apporter.

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Bonjour,

    Dans votre cas, j'utiliserai un UpdatePanel. Ce contrôle permet de ne rafraichir que certaines parties d'une page lors d'un PostBack.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre éclairé Avatar de Stephane_br
    Inscrit en
    Septembre 2005
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 222
    Par défaut
    Merci pour la piste.
    Je regarde de ce côté alors.
    Merci.

  4. #4
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Par défaut
    Bonjour,

    L'UpdatePanel est une possiblité. Ca rendrait ta page plus user-friendly vu qu'il n'y aurait pas de rechargement complet mais uniquement du total de ta facture.

    Après, on peu chipeauter un peu en disant qu'une petite requête Ajax JQuery ou Javascript serait peut être moins couteuse que d'utiliser tout un UpdatePanel pour ça.

    L'autre possibilité est de stocker temporairement les valeurs de ta page1 lorsque tu arrives sur la page2 (en Session, en Base, dans le ViewState, c'est selon les mécanismes de tes pages et tes besoins).
    De cette façon, au chargement de la page2, si previousPage ne correspond pas à la page1 tu sauras qu'il faut regarder les valeurs stockées en Session( ou base, ou...) et non ceux de la page1.

    En espérant t'avoir aidé.

  5. #5
    Membre éclairé Avatar de Stephane_br
    Inscrit en
    Septembre 2005
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 222
    Par défaut
    Merci pour vos pistes.
    Petite question, j'ai crée une classe dans le dossier App_Code pour les modifs que je dois faire.
    Est-ce que cette classe peut être accessible si j'utilise un update_panel ?
    A noter que dans cette classe, je fais des requêtes Sql.
    Est-ce que l'update panel "refait un tour" par le serveur pour s'exécuter ?
    Puis-je programmer de la même manière que je le fais dans une page classique avant qu'elle soit envoyée à l'internaute ?

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    L'UpdatePanel fonctionne grâce à des 'Triggers' (des déclencheurs). Un trigger peut être par exemple un LinkButton ou encore un Button.

    A ce trigger, on peut associer de manière classique un évènement lors du Click par exemple.

    Lorsque l'évènement du trigger est terminé, l'UpdatePanel se rafraichit et affiche les nouvelles informations.

    Donc oui vous pouvez utiliser la classe que vous avez créé dans le dossier App_Code, mais vous devrez veiller à bien l'instancier et récupérer les données dont vous avez besoin lorsque vous allez programmer votre évènement.

    [EDIT:]
    Voici un exemple par le code:

    Votre WebForm, contenant un ScriptManager (à ne pas oublier), un UpdatePanel contenant un Label et un LinkButton qui sera le trigger:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
            <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
                <ContentTemplate>
                    <asp:Label ID="Label1" runat="server"></asp:Label>
                </ContentTemplate>
     
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="LinkButton1" EventName="Click" />
                </Triggers>
            </asp:UpdatePanel>
     
            <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click" Text="Show Hello World"></asp:LinkButton>
    Votre CodeBehind, qui va gérer l'évènement lors du Click sur le LinkButton. Lors de cet évènement, on va instancier notre classe contenue dans le dossier App_Code afin de pouvoir afficher quelque chose dans notre Label :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            protected void LinkButton1_Click(object sender, EventArgs e)
            {
                AppCodeClass acc = new AppCodeClass();
     
                this.Label1.Text = acc.Test();
     
                this.UpdatePanel1.Update();
            }
    Votre classe dans le dossier App_Code, qui va récupérer les données que l'on souhaite afficher (pour l'exemple, c'est juste un 'Hello World' classique) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        public class AppCodeClass
        {
            public string Test()
            {
                return "Hello World";
            }
        }
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  7. #7
    Membre éclairé Avatar de Stephane_br
    Inscrit en
    Septembre 2005
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 222
    Par défaut
    Merci beaucoup pour ce code qui va beaucoup m'aider

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.3] Rechargement de page sans message du navigateur
    Par CinePhil dans le forum Langage
    Réponses: 4
    Dernier message: 23/04/2012, 22h58
  2. [AJAX] Raffraichir une page sans la recharger
    Par JClens dans le forum AJAX
    Réponses: 3
    Dernier message: 17/09/2010, 16h02
  3. Modifier une page sans la recharger...
    Par Ylias dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 10/05/2006, 11h06
  4. charger une page sans tout recharger
    Par budylove dans le forum Balisage (X)HTML et validation W3C
    Réponses: 11
    Dernier message: 21/10/2005, 11h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo