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 :

Postback, perte de variables


Sujet :

ASP.NET

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2007
    Messages : 16
    Points : 11
    Points
    11
    Par défaut Postback, perte de variables
    Bonjour !

    J'ai un problème et j'ai besoin d'aide. J'utilise AJAX pour avoir un diaporama sur mon site web. J'ai un timer qui à tous les 3 secondes, appelle un postback de la page. Le code est bon, mais lorsque les postback se produisent, les variables égalent null. Je souhaite donc transférer leur contenu dans des variables de session. Le problème, c'est que je ne sais pas quand le faire. J'ai essayé à plusieurs endroits et ça ne fonctionne pas. Je n'ai pas trouvé sur Internet où je devais effectuer cela. Selon mes essais, j'ai remarqué que je ne pouvais pas le faire dans le Page_Load et le Timer_onTick.

    Merci pour vos réponses !

  2. #2
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Salut,

    tu peux nous montrer un peu ton code ?

    Quand recuperes-tu les variables ?

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2007
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Voici ce qui est contenu dans le aspx.cs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    public partial class Accueil : System.Web.UI.Page
    {
        int Index;
        int NbPhotos;
        string[] Photos;
        string RacinePhotos = "Medias/diaporamas/";
     
        SqlConnection ConnexionSQL;
        SqlCommand Cmd;
        SqlDataReader Reader = null;
     
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                DDLChoixDiaporama.DataBind();
            }
            else
            {
                Index = (int)Session["Index"];
                NbPhotos = (int)Session["NbPhotos"];
                Photos = (string[])Session["Photos"];
            }
            if (!SM_Diaporama.IsInAsyncPostBack)
            {
                InitDiaporama(Convert.ToInt32(DDLChoixDiaporama.SelectedValue.ToString()));
            }
        }
     
        protected void InitDiaporama(int ID)
        {
            Index = 0;
            try
            {
                if (Session["Connexion"] != null)
                {
                    ConnexionSQL = (SqlConnection)Session["Connexion"];
                    ConnexionSQL.Open();
                    Cmd = new SqlCommand("SELECT COUNT(*) FROM PhotoDiaporamas AS P WHERE (P.PD_Diaporamas_Id = " + ID + ")", ConnexionSQL);
                    Cmd.CommandType = CommandType.Text;
                    NbPhotos = Convert.ToInt32(Cmd.ExecuteScalar());
                    Photos = new string[NbPhotos];
                    Cmd = new SqlCommand("SELECT P.Photo_Fichier FROM Photo AS P INNER JOIN PhotoDiaporamas AS PD ON (P.Photo_Id = PD.PD_Photo_Id) INNER JOIN Diaporamas AS D ON (PD.PD_Diaporamas_Id = D.Diaporamas_Id) WHERE (D.Diaporamas_Id = " + ID + ")", ConnexionSQL);
                    Cmd.CommandType = CommandType.Text;
                    Reader = Cmd.ExecuteReader();
                    while (Reader.Read())
                    {
                        Photos[Index] = RacinePhotos + Convert.ToString(Reader["Photo_Fichier"]);
                        Index++;
                    }
                }
                else
                {
                    // S'il y a une erreur, le diaporama ne fera pas planter le site
                    NbPhotos = 1;
                    Photos = new string[NbPhotos];
                    Photos[Index] = RacinePhotos + "erreur.gif";
                }
            }
            finally
            {
                if (Session["Connexion"] != null)
                {
                    ConnexionSQL.Close();
                }
            }
            Image_Diaporama.ImageUrl = Photos[0];
            Index = 0;
        }
     
        protected void RotationPhoto()
        {
            if (Index < NbPhotos)
            {
                Index++;
            }
            else
            {
                Index = 0;
            }
            Image_Diaporama.ImageUrl = Photos[Index];
            UP_Diaporama.Update();
        }
     
        protected void DDLChoixDiaporama_SelectedIndexChanged(object sender, EventArgs e)
        {
            InitDiaporama(Convert.ToInt32(DDLChoixDiaporama.SelectedValue.ToString()));
            UP_Diaporama.Update();
        }
        protected void Timer_Diaporama_Tick(object sender, EventArgs e)
        {
            Session["Index"] = Index;
            Session["NbPhotos"] = NbPhotos;
            Session.Add("Photos", Photos);
            RotationPhoto();
        }
    }

    Vous pouvez voir que j'ai tenté de transférer les valeurs de mes variables dans mes variables de session à deux endroits(Page_Load et Timer_Diaporama_Tick). Ce sont les seules places que j'ai essayé. Je ne comprends pas vraiment où je pourrais le faire....

  4. #4
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Alors, ca fait une éternité que je n'ai pas utilisé le timer, mais...

    Tu ne les mets dans la session que quand l'evenement tick se declenche, or, quand il se declenche, si je me rappelle bien, tu vas avoir un postback asynchrone, qui va essayer de récupérer les valeurs en session, ou elles n'auront pas encore été placées

    ces lignes la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Session["Index"] = Index;
    Session["NbPhotos"] = NbPhotos;
    Session.Add("Photos", Photos);
    je les vois mieux à la fin de la fonction InitDiaporama.

    Après, j'essayerais, à ta place, de ne pas trop utiliser de variable globales, la, Index est utilisé un peu à toutes les sauces

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2007
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Je vais repenser à ma façon de procéder. Je vous reviens avec ma solution !

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2007
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    En fin de compte, j'ai initialisé mes variables de session dans InitDiaporama et dans RotationPhoto. Ça fonctionne très bien.

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

Discussions similaires

  1. Bloquer page précédente car perte de variable de session
    Par phoenix3011 dans le forum Langage
    Réponses: 2
    Dernier message: 19/08/2006, 17h39
  2. Perte des variables de sessions
    Par Dayom dans le forum Langage
    Réponses: 12
    Dernier message: 17/07/2006, 11h04
  3. Réponses: 11
    Dernier message: 11/05/2006, 10h09
  4. [Tableaux] Perte de variables
    Par free01 dans le forum Langage
    Réponses: 1
    Dernier message: 22/04/2006, 02h12
  5. Réponses: 32
    Dernier message: 20/03/2006, 14h23

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