[Résolu][ASP.NET][C#] Heritage et partage de variable

Heritage et partage de variable [Résolu][ASP.NET][C#] - C#/.NET managed - Programmation

Marsh Posté le 07-07-2009 à 14:41:59    

Bonjour,
 
Petite question existencielle.
 
J'ai créé 2 pages aspx et je veux que mes methodes en c# partage des variables.
 
Certain me diront :"Malheureuse ! T'as qu'à faire une classe mere" ou un truc du genre.
 
Mais je vois pas comment faire vu que mes classes sont des "public partial class Acceuil : System.Web.UI.Page"
 
Merci pour votre aide


Message édité par fatloui le 09-07-2009 à 15:56:15
Reply

Marsh Posté le 07-07-2009 à 14:41:59   

Reply

Marsh Posté le 08-07-2009 à 11:41:51    

En fait je veux qu'elles partagent des données.
 
une des pages passe un booléen à true et je veux que l'autre page puisse verifier si ce booléen est à true
 
Dans les 3 possibilités proposées, j'optais pour la 2eme.
 
Je peux donc declarer une classe static dans un des fichiers aspx.cs et l'appeler dans une autre page mais j'ai un probleme de droit.
 
pourtant ma classe est public
 
CS0122: 'Projet.test.test()' est inaccessible en raison de son niveau de protection

 
edit : probleme résolu j'avais oublié de mettre mon constructeur public


Message édité par fatloui le 08-07-2009 à 11:44:10
Reply

Marsh Posté le 08-07-2009 à 11:54:32    

rhaaaaa non en fait ca marche pas
 
la classe static n'est pas reconnu dans l'autre pages .aspx.
 
Que faire :( ?

Reply

Marsh Posté le 08-07-2009 à 11:55:32    


non non a pu constructeur.
 
en fait j'avais d'abord testé avec un classe normale puis apres avec une classe static

Reply

Marsh Posté le 08-07-2009 à 12:05:37    

ben en fait le namespace est le meme.
Visual studio reconnait la classe car il me l'a propose
 
mais lorsque je compile j'obtiens cette erreur :  
[quoted]
Message d'erreur du compilateur: CS0103: Le nom 'test' n'existe pas dans le contexte actuel
 
Erreur source:
 
 
 
Ligne 18 :         protected void Page_Load(object sender, EventArgs e)
Ligne 19 :         {
Ligne 20 :              
Ligne 21 :  
Ligne 22 :             Label1.Text = "test" + test.testou;
 
[/quoted]
 
sinon  mon code est le suivant

Code :
  1. public static class test
  2.     {
  3.         public static int testou = 0;
  4.     }


 
et je l'appelle comme ca

Code :
  1. test.testou = 1;


 
je pense pas que le probleme vienne de la
 
edit : pardon pardon je sais ou est l'erreur
VS nous assiste tellement que je deviens attardé

Message cité 1 fois
Message édité par fatloui le 08-07-2009 à 12:07:35
Reply

Marsh Posté le 08-07-2009 à 12:09:36    

Le problème de ta classe statique c'est que tout les utilisateurs de ton site partageront le même objet avec du coup les mêmes valeurs.
 
Enfin c'est ptet ce que tu veux [:spamafote]
 
Pourquoi pas ne pas instancier un objet et le stocker en session? (si c'est par utilisateur)

Reply

Marsh Posté le 08-07-2009 à 12:10:48    

ov3rflow a écrit :

Le problème de ta classe statique c'est que tout les utilisateurs de ton site partageront le même objet avec du coup les mêmes valeurs.
 
Enfin c'est ptet ce que tu veux [:spamafote]
 
Pourquoi pas ne pas instancier un objet et le stocker en session? (si c'est par utilisateur)


non c'est bien pour tout le monde avec les meme valeur
 
par contre je pensais qu'ajouter une fonction get allait resoudre mon probleme mais en fait non j'ai la meme erreur

Reply

Marsh Posté le 08-07-2009 à 12:15:21    

Regarde la casse :whistle:

 

Edit: non rien, j'ai mélangé les deux code

 


Ou est définie ta classe "test" ? c'est surement le début de ta réponse


Message édité par ov3rflow le 08-07-2009 à 12:17:53
Reply

Marsh Posté le 08-07-2009 à 13:15:45    

alors. dans page1.aspx.cs
 

Code :
  1. namespace MonProjet
  2. {
  3.     public static class test
  4.     {
  5.         public static int testou = 0;
  6.         public static int gettestou()
  7.         {
  8.             return testou;
  9.         }
  10.     }
  11.     public partial class Page1 : System.Web.UI.Page
  12.     {
  13.         protected void Page_Load(object sender, EventArgs e)
  14.         {
  15.             test.testou = 1;
  16. }
  17. }
  18. }


 
dans page2.aspx.cs

Code :
  1. namespace MonProjet
  2. {
  3.     public partial class Page2 : System.Web.UI.Page
  4.     {
  5.         protected void Page_Load(object sender, EventArgs e)
  6.         {
  7.             Label1.Text = "test" + test.gettestou();
  8.             Label1.Visible = true;
  9.         }
  10. }
  11. }


Message édité par fatloui le 08-07-2009 à 13:18:10
Reply

Marsh Posté le 08-07-2009 à 14:15:42    


ah ben m*erde
 
non ca marche pas chez moi
 
Message d'erreur du compilateur: CS0103: Le nom 'test' n'existe pas dans le contexte actuel
 
c'est hebergé sur un serveur IIS mais ca devrait pas changer grand chose...

Reply

Marsh Posté le 08-07-2009 à 14:15:42   

Reply

Marsh Posté le 08-07-2009 à 14:21:09    

juste pour la deuxieme
 
edit : juste celle qui n'a pas la classe static


Message édité par fatloui le 08-07-2009 à 14:21:26
Reply

Marsh Posté le 08-07-2009 à 14:32:58    

Ouaip, car c'est surement un projet site web, ou chaque page est compilée séparément.
 
Fred82 tu n'as pas le problème car tu fais un projet application web, non ?
 
 
Dans ta page 2 tu dois mettre une référence à la page 1, pour qu'il puisse trouver ta classe "test"


Message édité par ov3rflow le 08-07-2009 à 14:33:33
Reply

Marsh Posté le 08-07-2009 à 14:47:02    


 
 
A partir de Visual Studio 2005 "File > New > site web"
 
L'application web a été ajouté avec le SP1 d'ailleurs, l'application web était sensé disparaitre il me semble
 
 
 
fatloui, essai de mettre une référence a ta page avec la directive suivante: <%@ Reference Page="~/Page1.aspx"> dans la page 2
 
 
Ensuite:      
 

Code :
  1. Page1.test.testou = 1;

Message cité 1 fois
Message édité par ov3rflow le 08-07-2009 à 14:50:44
Reply

Marsh Posté le 08-07-2009 à 14:59:23    

  


Non non, la première version de Visual Studio 2005, pour faire du web y'avais que le "Site Web" de dispo. Mais migrer d'un solution application web vers site web c'était la misère (pour les sites complexes). Y'a donc eu le sp1 qui a remit l'application web de dispo.

 

Dans un site web, Les pages sont toutes compilés séparément et indépendamment. Ce qui a ses avantages.
Le site web apporte d'autres choses par rapport a une application web. Ce n'est pas "pourri" ;). Moi personnellement quand j'ai le choix, je préfère le site web que l'application.

 


Message édité par ov3rflow le 08-07-2009 à 14:59:49
Reply

Marsh Posté le 08-07-2009 à 15:16:05    

Ya un petit tableau la:
http://msdn.microsoft.com/en-us/li [...] app_topic5

 


Sinon j'ai trouvé ça:

 

Ya matière a lire:
http://www.codersbarn.com/post/200 [...] oject.aspx

  

Moi ce que j'aime bien c'est de pouvoir dropper les sources sur iis sans avoir eu a compiler, et pouvoir dropper des modifs sans interruption du service.
Du coup tu peux juste livrer le .cs que tu as modifié(en mode compilation dynamique) ou la dll de ta page (en mode précompilé)

 

Aprés c'est sûr c'est pas adapté a tous les environnements.


Message édité par ov3rflow le 08-07-2009 à 15:26:31
Reply

Marsh Posté le 08-07-2009 à 15:25:19    

Genial ca fonctionne !! Merci pour votre aide ^^

Reply

Marsh Posté le 08-07-2009 à 15:36:14    

c'est encore plus fort que prevu
 
je peux acceder aux variables publiques de Page1 donc pas besoin de classe static.
 
Ben encore merci ^^

Reply

Marsh Posté le 08-07-2009 à 15:42:48    

La question qu'on peut se poser: est ce vraiment propre ? :whistle:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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