[C# et VB .net] Problème de viewState

Problème de viewState [C# et VB .net] - C#/.NET managed - Programmation

Marsh Posté le 13-07-2006 à 11:44:58    

Bonjour,
Voilà j'ai un souci qui m'est apparu
C'est vraiment simple mais ça ne marche pas.  
 
J'ai un control ascx sur lequel j'ai un label et un bouton.
 
Le text de ce label est défini dans le code behind dans Page_Load si !ispostback
Quand je click sur mon bouton je récupère le onClick (je ne fais rien dedans (c'est pour l'exemple))
jusque là tout va bien le label garde son text meme si la page est reload
 
Ensuite j'ajoute un attribut de class. de type String.
Je le value tout comme mon label dans le Page load si !ispostback
Par contre lorsque je click sur le bouton, la valeur que j'avai affecté à ce string disparait !
Je me retrouve dans l'évènement onClick avec un string vide.
 
Je ne comprend pas du tout
Merci de votre aide

Reply

Marsh Posté le 13-07-2006 à 11:44:58   

Reply

Marsh Posté le 13-07-2006 à 13:43:11    

Normal.
Ton Label est un WebControl, dont la valeur est automatiquement (merci ASP.Net) maintenu avec le ViewState.
La valeur de ta string (à ce propos, veut mieux dire "champ" que "attribut" de classe : attribut en .Net c'est autre chose), n'est pas maintenue.
Le principe d'une appli web, c'est que tout est détruit et reconstruit à chaque aller/retour serveur. Donc quand ASP.Net recréé ton objet, il ne peut pas se souvenir de la valeur de ta chaine.
 
Solution 1 : mettre le chargement de ta chaine hors du bloc if(!this.IsPostBack)
Solution 2 : maintenir ta chaine dans le ViewState :

Code :
  1. // en postback
  2. if(!this.IsPostBack)
  3. {
  4.     // chargement de la chaine
  5.     string machaine= ...
  6.     // on la stocke dans le ViewState
  7.     ViewState["machaine"] = machaine;
  8.     ...
  9. }
  10. else // si on est en postback
  11. {
  12.     // on regarde si la valeur est bien dans le ViewState
  13.     object obj = ViewState["machaine"];
  14.     // si oui
  15.     if(obj != null)
  16.         // on charge la valeur de la chaine
  17.         machaine = obj.ToString();
  18. }

Reply

Marsh Posté le 13-07-2006 à 15:00:28    

ok je te remercie

Reply

Marsh Posté le 13-07-2006 à 18:39:37    

ou passer par des variables de session, c'est encore mieux.
 
Session["nomvariablesession"] = "blablabliblibblublu";
 
et pour récupérer au prochain passage
 
string ch = Session["nomvariablesession"];
 
ou nomvariablesession peut être n'importe quoi :D


Message édité par moi23372 le 13-07-2006 à 18:40:35
Reply

Marsh Posté le 13-07-2006 à 19:20:09    

Question de philosophie... et d'environnement !
Je n'ai jamais vu l'utilisation du ViewState bloquée en contexte professionnel, alors que les Session assez souvent
Mais bon.. tant que ça marche.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed