OVH Cloud OVH Cloud

simple response.write en aspx d'une variable globale

4 réponses
Avatar
Pierre
Boonjour,

Dans une page aspx, je souhaite faire une response.write classique d'une
variable globale

La variable est déclarée dans un module, en tant que public, elle est donc
globale à tout le projet.
D'ailleurs quand on l'appelle à partir de n'importe quel point du projet il
n'y a pas d'erreur, ni à la compil ni à l'exécution.
Là où j'ai un souci, c'est lors de l'appel de cette variable dans une page
aspx.
Voici ce qui est dans la page aspx qui est intégrée dans le projet :

test.aspx :

<%=glob_mavar%>

Ceci se compile bien, sans erreur ni warning.
Mais une erreur survient lors de l'exécution : le nom 'glob_mavar' n'est pas
déclaré.
Et je ne comprends pas trop, parce qu'en plus option explicit et option
strict sont sur on.

Merci d'avance.

Pierre.

4 réponses

Avatar
Daniel TIZON
Bonjour Pierre

Les variables publiques définies dans un module public sont partagées par
tous les utilisateurs de ton application Web, et ne sont pas du tout
adaptées au développement web !
En ASP.NET/VB.NET, même si les modules sont disponibles, leur équivalent au
niveau du framework .NET sont les classes et méthodes marquées Shared.
L'utilisation de variables Shared pose problème en développement Web, car
elles ne sont pas nativement protégées contre des accès conccurents qui ne
manqueront pas d'arriver,
à causes des multiples threads d'IIS sur l'application web. L'accès
concurrent sur ces variables si tu ne prends pas certaines précautions peut
te proquer des effets innatendus.
Si tu veux éviter les problèmes, utilise des objets de conservation d'état
conçu pour celà :
- Si tu souhaites partages des variables entre plusieurs pages pour un même
utilisateur, utilises la SESSION
- Si tu souhaites partager des variables entre plusieurs pages pour tous les
utilisateurs, utilises l'objet APPLICATION, plutôt que les vairables dans
les modules.

Enfin, pouquoi veux-tu utilise la syntaxe <%= %>, je suis certain d'avoir
beaucoup mieux à te proposer
Que veux-tu faire précisément ?

Cordialement

--
Daniel TIZON
MCP - MCSD.NET - MCT


"Pierre" a écrit dans le message de news:
%
Boonjour,

Dans une page aspx, je souhaite faire une response.write classique d'une
variable globale

La variable est déclarée dans un module, en tant que public, elle est donc
globale à tout le projet.
D'ailleurs quand on l'appelle à partir de n'importe quel point du projet
il n'y a pas d'erreur, ni à la compil ni à l'exécution.
Là où j'ai un souci, c'est lors de l'appel de cette variable dans une page
aspx.
Voici ce qui est dans la page aspx qui est intégrée dans le projet :

test.aspx :

<%=glob_mavar%>

Ceci se compile bien, sans erreur ni warning.
Mais une erreur survient lors de l'exécution : le nom 'glob_mavar' n'est
pas déclaré.
Et je ne comprends pas trop, parce qu'en plus option explicit et option
strict sont sur on.

Merci d'avance.

Pierre.



Avatar
Pierre
Salut Daniel,

Il s'agit en fait de mettre à jour dynamiquement certains paths d'url dans
des fichiers CSS et javascript.
Pour le temps du développement pendant lequel l'application web est hébergée
sous un virtual directory et non sous un site dédié, il faut mettre à jour
certaines url absolues dans des fichiers CSS et javascript. Le javascript
met à jour des chemins src d'images dans la page en fonction des événements
over et autres, et le CSS doit référencer des images de fond pour certains
contrôles. Et cela est appelé à plusieurs reprises dans plusieurs pages
situées dans des dossiers différents de l'application web, donc, nécessité
d'utilisé des chemins absolues.
Je veux donc quelquechose de simple : j'ai renommé les fichiers .js et .css
en .js.aspx et .css.aspx, et dans ces fichiers la variable global "base_url"
est écrite via les tages <%= %>. Très simple donc : on ne va pas faire des
codes behind sur des js et des css. Il s'agit effectivement d'une variable
globale, qui pourrait être une constante car elle n'est accédée qu'en
lecture.

J'ai déclaré cette variable dans global.asax.vb, en shared, et je l'appelle
de partout via monprojet.global.base_url.

Il ne s'agit donc pas d'une problématique de POO.
Et si tu as une meilleure idée pour solutionner cette problématique, je suis
preneur.

A plus.

Pierre.


"Daniel TIZON" a écrit dans le message
de news:
Bonjour Pierre

Les variables publiques définies dans un module public sont partagées par
tous les utilisateurs de ton application Web, et ne sont pas du tout
adaptées au développement web !
En ASP.NET/VB.NET, même si les modules sont disponibles, leur équivalent
au niveau du framework .NET sont les classes et méthodes marquées Shared.
L'utilisation de variables Shared pose problème en développement Web, car
elles ne sont pas nativement protégées contre des accès conccurents qui ne
manqueront pas d'arriver,
à causes des multiples threads d'IIS sur l'application web. L'accès
concurrent sur ces variables si tu ne prends pas certaines précautions
peut te proquer des effets innatendus.
Si tu veux éviter les problèmes, utilise des objets de conservation d'état
conçu pour celà :
- Si tu souhaites partages des variables entre plusieurs pages pour un
même utilisateur, utilises la SESSION
- Si tu souhaites partager des variables entre plusieurs pages pour tous
les utilisateurs, utilises l'objet APPLICATION, plutôt que les vairables
dans les modules.

Enfin, pouquoi veux-tu utilise la syntaxe <%= %>, je suis certain d'avoir
beaucoup mieux à te proposer
Que veux-tu faire précisément ?

Cordialement

--
Daniel TIZON
MCP - MCSD.NET - MCT


"Pierre" a écrit dans le message de news:
%
Boonjour,

Dans une page aspx, je souhaite faire une response.write classique d'une
variable globale

La variable est déclarée dans un module, en tant que public, elle est
donc globale à tout le projet.
D'ailleurs quand on l'appelle à partir de n'importe quel point du projet
il n'y a pas d'erreur, ni à la compil ni à l'exécution.
Là où j'ai un souci, c'est lors de l'appel de cette variable dans une
page aspx.
Voici ce qui est dans la page aspx qui est intégrée dans le projet :

test.aspx :

<%=glob_mavar%>

Ceci se compile bien, sans erreur ni warning.
Mais une erreur survient lors de l'exécution : le nom 'glob_mavar' n'est
pas déclaré.
Et je ne comprends pas trop, parce qu'en plus option explicit et option
strict sont sur on.

Merci d'avance.

Pierre.







Avatar
Daniel TIZON
Salut Pierre,
Personnellement je n'ai jamais eu de problèmatique suffisament pointue pour
justifier la création de CSS dynamiquement,
Concernant la génération de .js dynamiquement, j'ai toujours réussi à m'en
sortir en passant des arguments supplémentaires aux méthodes javascripts
pour qu'elles récupèrent correctement les chemins selon le répertoire
d'exécution de la page. Une autre solution consiste également à utiliser les
fonctions d'enregistrement de script dans la page avec
Page.RegisterClientScript ou Page.RegisterClientScript, code exécuté depuis
ta page ou depuis un UserControl qui aurait besoin d'injecter du javascript
dans la page pour fonctionner.

Cordialement,

--
Daniel TIZON
MCP - MCSD.NET - MCT


"Pierre" a écrit dans le message de news:

Salut Daniel,

Il s'agit en fait de mettre à jour dynamiquement certains paths d'url dans
des fichiers CSS et javascript.
Pour le temps du développement pendant lequel l'application web est
hébergée sous un virtual directory et non sous un site dédié, il faut
mettre à jour certaines url absolues dans des fichiers CSS et javascript.
Le javascript met à jour des chemins src d'images dans la page en fonction
des événements over et autres, et le CSS doit référencer des images de
fond pour certains contrôles. Et cela est appelé à plusieurs reprises dans
plusieurs pages situées dans des dossiers différents de l'application web,
donc, nécessité d'utilisé des chemins absolues.
Je veux donc quelquechose de simple : j'ai renommé les fichiers .js et
.css en .js.aspx et .css.aspx, et dans ces fichiers la variable global
"base_url" est écrite via les tages <%= %>. Très simple donc : on ne va
pas faire des codes behind sur des js et des css. Il s'agit effectivement
d'une variable globale, qui pourrait être une constante car elle n'est
accédée qu'en lecture.

J'ai déclaré cette variable dans global.asax.vb, en shared, et je
l'appelle de partout via monprojet.global.base_url.

Il ne s'agit donc pas d'une problématique de POO.
Et si tu as une meilleure idée pour solutionner cette problématique, je
suis preneur.

A plus.

Pierre.


"Daniel TIZON" a écrit dans le
message de news:
Bonjour Pierre

Les variables publiques définies dans un module public sont partagées par
tous les utilisateurs de ton application Web, et ne sont pas du tout
adaptées au développement web !
En ASP.NET/VB.NET, même si les modules sont disponibles, leur équivalent
au niveau du framework .NET sont les classes et méthodes marquées Shared.
L'utilisation de variables Shared pose problème en développement Web, car
elles ne sont pas nativement protégées contre des accès conccurents qui
ne manqueront pas d'arriver,
à causes des multiples threads d'IIS sur l'application web. L'accès
concurrent sur ces variables si tu ne prends pas certaines précautions
peut te proquer des effets innatendus.
Si tu veux éviter les problèmes, utilise des objets de conservation
d'état conçu pour celà :
- Si tu souhaites partages des variables entre plusieurs pages pour un
même utilisateur, utilises la SESSION
- Si tu souhaites partager des variables entre plusieurs pages pour tous
les utilisateurs, utilises l'objet APPLICATION, plutôt que les vairables
dans les modules.

Enfin, pouquoi veux-tu utilise la syntaxe <%= %>, je suis certain
d'avoir beaucoup mieux à te proposer
Que veux-tu faire précisément ?

Cordialement

--
Daniel TIZON
MCP - MCSD.NET - MCT


"Pierre" a écrit dans le message de news:
%
Boonjour,

Dans une page aspx, je souhaite faire une response.write classique d'une
variable globale

La variable est déclarée dans un module, en tant que public, elle est
donc globale à tout le projet.
D'ailleurs quand on l'appelle à partir de n'importe quel point du projet
il n'y a pas d'erreur, ni à la compil ni à l'exécution.
Là où j'ai un souci, c'est lors de l'appel de cette variable dans une
page aspx.
Voici ce qui est dans la page aspx qui est intégrée dans le projet :

test.aspx :

<%=glob_mavar%>

Ceci se compile bien, sans erreur ni warning.
Mais une erreur survient lors de l'exécution : le nom 'glob_mavar' n'est
pas déclaré.
Et je ne comprends pas trop, parce qu'en plus option explicit et option
strict sont sur on.

Merci d'avance.

Pierre.











Avatar
zk
A quel niveau tu as declarer ta variable, car il faut qu'elle soit hors de
toute fonction ou procedure

j'ai deja eu ce probleme et j'ai declaré ma variable juste avant page_load
Public strUrl As String

et dans ma page aspx je l'appeler comme ceci

src=<%= strUrl %>

et ca marche tres bien

j'espere que ca repond a la question sinon un bout de code et ou il se
trouve pourra m'aider à t'aider

"Pierre" a écrit :

Boonjour,

Dans une page aspx, je souhaite faire une response.write classique d'une
variable globale

La variable est déclarée dans un module, en tant que public, elle est donc
globale à tout le projet.
D'ailleurs quand on l'appelle à partir de n'importe quel point du projet il
n'y a pas d'erreur, ni à la compil ni à l'exécution.
Là où j'ai un souci, c'est lors de l'appel de cette variable dans une page
aspx.
Voici ce qui est dans la page aspx qui est intégrée dans le projet :

test.aspx :

<%=glob_mavar%>

Ceci se compile bien, sans erreur ni warning.
Mais une erreur survient lors de l'exécution : le nom 'glob_mavar' n'est pas
déclaré.
Et je ne comprends pas trop, parce qu'en plus option explicit et option
strict sont sur on.

Merci d'avance.

Pierre.