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 :

Variables persistantes dans la page


Sujet :

ASP.NET

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 69
    Par défaut Variables persistantes dans la page
    Bonjour,

    Dans la plupart des pages de mon application, j'ai besoin de variables persistante. Pour le moment je déclarait ces variables en private static , ce qui me permettait d'y avoir accès sur toute la page.

    Seulement j'ai gouté mon erreur quand j'ai eu plusieurs bug apriori inexplicable, qui sont finalement due au fait que les variables déclarées static sont partagés entre utilisateur.

    J'aurai donc voulu savoir le meilleur moyen d'avoir des variables persistante sur toute la page mais lié à la session de l'utilisateur sachant qu'il peut y avoir des variables DataTable assez lourdes.
    En cherchant sur le net j'ai trouvé les viewstates, les session et les hiddenfields.

    Seulement personne ne semble d'accord sur la meilleure solution parmi ces 3 là, donc j'aurai voulu votre avis pour mon cas.

    Merci

  2. #2
    Membre expérimenté
    Homme Profil pro
    Freelance
    Inscrit en
    Février 2008
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 312
    Par défaut
    salut,

    ces variables en private static , ce qui me permettait d'y avoir accès sur toute la page. -> les déclarer en protected das le code behind (sans le static) suffit pour y avoir accès dans toutes la page (code et aspx).

  3. #3
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Salut,
    Citation Envoyé par Champouil Voir le message
    j'ai besoin de variables persistante
    A quel point persistantes: le temps d'une requête ou de la session de l'internaute?

    Tu peux faire un dictionnaire privé statique private static Dictionary<string, TonObjet> taVariablePersistante = new Dictionary<string, TonObjet>(); dans un singleton en te servant du Session.SessionId comme clef du dictionnaire.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 69
    Par défaut
    A quel point persistantes: le temps d'une requête ou de la session de l'internaute?
    Seulement le temps de vie de la page.
    Depuis l'arrivé de l'utilisateur jusqu'à ce qu'il en change.

    Et j'ai mis en place le dictionnaire dans un pattern singleton ça fonctionne très bien mais n'est-ce pas fait pour avoir les variables sur toute la session pas juste que pour une page ?

    les déclarer en protected das le code behind (sans le static) suffit pour y avoir accès dans toutes la page.
    Ok, seulement ces variables gardent leurs valeurs en cas de postback ?

  5. #5
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Citation Envoyé par Champouil Voir le message
    Seulement le temps de vie de la page
    Citation Envoyé par Champouil Voir le message
    Ok, seulement ces variables gardent leurs valeurs en cas de postback ?
    Faut savoir ce que tu veux.

    Une fois que la page est envoyée au client son cycle de vie est terminé.
    "Winter is coming" (ma nouvelle page d'accueil)

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 69
    Par défaut
    Ok, je clarifie :

    Ce que je souhaite c'est que mes variables (affectés à ma page) gardent leurs valeurs tout le temps que l'utilisateur reste sur la page, même en cas de postback.

    Ce que je pourrai faire en passant mes variable dans le viewstate ou une variable de session à chaque postback mais justement ce je demande c'est quel est la meilleur méthode.

  7. #7
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 51
    Par défaut
    moi personnellement j'utilise les variable de session et d’ailleurs les varaible de session sont faites pour ça

  8. #8
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Citation Envoyé par Michou2000 Voir le message
    les varaible de session sont faites pour ça
    Ben non. Les variables de session durent au delà de la page et toute la session de l'internaute.
    c'est quel est la meilleur méthode.
    Ma favorite reste le dictionnaire car on a des objets fortement typés. La session ou le viewstate ne renvoient pas des objets typés. Il faut les convertir => source de plantage.

    Maintenant, la solution de facilité, si tu as peu de données c'est le viewstate. Mais on aime ou pas. Attention, cela charge la page.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  9. #9
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 69
    Par défaut
    Donc si je souhaite utiliser le singleton seulement pour ma page, je peut faire comme ca ?

    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
     
    public partial class maPage{
     
        protected void Page_Load(object sender, EventArgs e)
        {
              Singleton.GetInstance().dictionary.add(idUser, Value);
        }
     
        public sealed class Singleton
        {
            private static Singleton instance = null;
            private static readonly object padlock = new object();
            private static Dictionary<int, monType> _dictionary = null;  
     
            Singleton()
            {
                _dictionary = new Dictionary<int, monType>();
            }
     
            public static Singleton GetInstance()
            {
                lock (padlock)
                {
                    if (instance == null ) 
                    {
                        instance = new Singleton();
                     }
                    return instance;
                }
            }
     
            public Dictionary<int,monType> dictionary
            {
                get { return _dictionary; }
            }
         }
    }
    Et dans ce cas la chaque user aura sa propre valeur en fonction de son ID
    Enfin si j'ai bien compris.

  10. #10
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Citation Envoyé par Champouil Voir le message
    je peut faire comme ca ?
    A un détail près: tu ne dois pas exposer ton dictionnaire mais faire des méthodes du genre "Add(int id, MonType monType)".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void Add(int id, MonType monType)
    {
     lock (padlock)
     {
      _dictionary.Add(id, monType);
     }
    }
    Dans le cas contraire, ce n'est pas thread safe.
    "Winter is coming" (ma nouvelle page d'accueil)

  11. #11
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 69
    Par défaut
    Eh bien merci, ça marche nickel

  12. #12
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Tu devrais aussi sortir ton Singleton de la page. Ainsi, tu pourras y accéder de partout.

    Utilise le session_end du global asax pour supprimer les éléments de ton dictionnaire.
    "Winter is coming" (ma nouvelle page d'accueil)

  13. #13
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 69
    Par défaut
    Tu devrais aussi sortir ton Singleton de la page. Ainsi, tu pourras y accéder de partout.
    Ah, donc le mieux est d'avoir 1 seul singleton qui va gérer toutes mes variables globales ? Mais du coup les variables seront accessible sur toute l'application ce qui ne m'enchante pas vraiment .

    Utilise le session_end du global asax pour supprimer les éléments de ton dictionnaire.
    Ok, merci du tips je me demandais où décharger mes variable .

  14. #14
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Citation Envoyé par Champouil Voir le message
    Ah, donc le mieux est d'avoir 1 seul singleton qui va gérer toutes mes variables globales ?
    Toutes non, pas forcement. Il faut donner un petit périmètre de responsabilité à tes objets. C'est à toi de voir.
    Citation Envoyé par Champouil Voir le message
    Mais du coup les variables seront accessible sur toute l'application ce qui ne m'enchante pas vraiment .
    Le singleton est déjà accessible en faisant Singleton singleton = new maPage.Singleton(); depuis n'importe quelle classe de ton projet.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/02/2010, 13h43
  2. [MySQL] Récupérer variable tpl dans une page PHP
    Par diabli73 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 25/09/2008, 10h12
  3. Réponses: 11
    Dernier message: 23/11/2007, 10h31
  4. Récuperer des variables vbs dans une page php
    Par tese84 dans le forum VBScript
    Réponses: 18
    Dernier message: 19/06/2007, 10h28
  5. Réponses: 3
    Dernier message: 27/11/2006, 14h16

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