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 :

[C#] User Control, garder une valeur


Sujet :

ASP.NET

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Points : 295
    Points
    295
    Par défaut [C#] User Control, garder une valeur
    j'ai fait un user Control. J'ai fait une propriété.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    private int idFichier;
     
    public int IdFichier
    {
    	get
    	{
    		return idFichier;
    	}
    	set
    	{		
    		idFichier=value;
    	}
    }
    Ce User Control est utilisé pour être dans un datagrid. Donc j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <uc1:imgStatut id="monuser" runat="server" IdFichier='<%#DataBinder.Eval(Container, "DataItem.idfichier")%>' >
    Or quand je fais un postBack avec un drop downlist, ma propriété de mon User Control reviens à vide. Comment faire pour qu'il stocke la valeur ?

    PS: Désolé pour le sujet qui n'est pas clair, je ne savais pas quoi mettre

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Points : 1 046
    Points
    1 046
    Par défaut
    Le probleme c'est que tu es en Web pas sur le client en winform, du coup ta page est instanciée à chaque requête de l'utilisateur et rien n'est persisté. Si tu veux conserver tes données d'un postBack à l'autre il faut les stocker toi même dans une des collections dédiées : l'Application, la Session ou le ViewState (ou encore n'importe quoi d'autre à toi comme un fichier ou que sais-je).
    Typiquement dans ton cas le ViewState s'impose :

    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
     
    public int IdFichier
    {
       get
       {
          if( ViewState["idFichier"] != null )
          {
                return Convert.ToInt32(ViewState["idFichier"]);
          }
          else retouner une valeur par defaut ou exception;
       }
       set
       {      
          ViewState["idFichier"] = value;
       }
    }
    Et tu n'as plus besoin de ta variable IdFichier.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Points : 295
    Points
    295
    Par défaut
    Comment ston stocker les variables d'un datagrid lors d'un postpack ?
    Il utilise aussi le viewstate ?

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Points : 1 046
    Points
    1 046
    Par défaut
    Oui, sauf indication contraire les controles asp.net stockent leur état dans le viewstate (un champ caché coté client).

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Points : 295
    Points
    295
    Par défaut
    Comme il est dans un datagrid, il faut que le nom de mon viewstate est un nom unique, comment faire ?

  6. #6
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut Pourquoi
    Pourquoi ne pas créer un champs caché pour stocker la valeur de la propriété ?

    Evidemment cela peut se faire seulement si elle n'est pas amenée à changer coté client...

    Fremy

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Points : 1 046
    Points
    1 046
    Par défaut
    Citation Envoyé par Oberown
    Comme il est dans un datagrid, il faut que le nom de mon viewstate est un nom unique, comment faire ?
    Je ne comprends pas bien ton soucis, qu'est ce qui est dans un datagrid ?

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Points : 295
    Points
    295
    Par défaut
    Mon composant est dans le datgrid, donc il est généré plusieurs fois, donc le viewstate aura plusieurs fois le même nom.

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Points : 1 046
    Points
    1 046
    Par défaut
    Tu n'as pas a te soucier de ça, en qque sorte asp.net gere un ViewState par composant et il s'occupe de faire en sorte qu'il n'y ait pas de collision de nom (en prefixant les champs par le nom du controle parent en particulier). tu ne devrais donc pas avoir de soucis.

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Points : 295
    Points
    295
    Par défaut
    Ca ne marche pas :-(

    Dans ma propriété je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public int IdFichier
    {
    	get
    	{
    		return Convert.ToInt32(ViewState["idFichier"]);
    	}
    	set
    	{	
    		Label1.Text=value.ToString();
    			ViewState["idFichier"] = value;
    	}
    }
    Et quand il y a postback, mon label1 a bien la bonne valeur. Et le Viewstate est null :-(

    J'ai l'impression que mon Load est fait avant l'accès a ma propriété.

    Donc dans ma propriété je fai appel a une fonction, et je ne stocke aucune valeur dans les viewstate.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public int IdFichier
    {
    	get
    	{
    		return idFichier;
    	}
    	set
    	{	
    		idFichier=value;
    		maFonction();
    	}
    }

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

Discussions similaires

  1. garder une valeur apres un rechargement
    Par isma92 dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 02/02/2007, 13h43
  2. [MySQL] garder une valeur en memoire et la reutiliser par la suite
    Par stefon dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 13/12/2006, 14h00
  3. Réponses: 4
    Dernier message: 12/12/2006, 08h14
  4. Garder une valeur en mémoire
    Par Pitou5464 dans le forum Access
    Réponses: 4
    Dernier message: 08/09/2006, 19h06
  5. Garder une valeur d'un formulaire
    Par Shandler dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/07/2006, 09h52

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