Je développe un compo pour asp.net en vb. C'est que l'on appelle un compo
composite.
Pour simplifier j'ai un bouton et un panel. Sur le Onclick du bouton
j'execute une fonction (runat="server") qui rend visible mon panel.
Jusque là tout va bien.
Mon problème réside essentiellement au niveau de la gestion du postback.
Comme vous pouvez vous en douter dès qu'il y a un postback mon panel se
referme tout le temps !
J'ai donc essayé de comprendre le coup des viewstate mais je n'arrive
jamais
à le mettre à jour pour qu'il soit prit en compte au retour.
Bref j'ai lu 1 bouquins et 2 sites internet, chacun passe un peu
differemment et j'ai un peu de mal à mis retrouver.
- Est-ce que le viewstate est global à la page ou spécifique à l'instance
du compo ?
- Comment gérer de manière simple les données du postback ?
Je développe un compo pour asp.net en vb. C'est que l'on appelle un compo
composite.
Pour simplifier j'ai un bouton et un panel. Sur le Onclick du bouton
j'execute une fonction (runat="server") qui rend visible mon panel.
Jusque là tout va bien.
Mon problème réside essentiellement au niveau de la gestion du postback.
Comme vous pouvez vous en douter dès qu'il y a un postback mon panel se
referme tout le temps !
J'ai donc essayé de comprendre le coup des viewstate mais je n'arrive
jamais
à le mettre à jour pour qu'il soit prit en compte au retour.
Bref j'ai lu 1 bouquins et 2 sites internet, chacun passe un peu
differemment et j'ai un peu de mal à mis retrouver.
- Est-ce que le viewstate est global à la page ou spécifique à l'instance
du compo ?
- Comment gérer de manière simple les données du postback ?
Je développe un compo pour asp.net en vb. C'est que l'on appelle un compo
composite.
Pour simplifier j'ai un bouton et un panel. Sur le Onclick du bouton
j'execute une fonction (runat="server") qui rend visible mon panel.
Jusque là tout va bien.
Mon problème réside essentiellement au niveau de la gestion du postback.
Comme vous pouvez vous en douter dès qu'il y a un postback mon panel se
referme tout le temps !
J'ai donc essayé de comprendre le coup des viewstate mais je n'arrive
jamais
à le mettre à jour pour qu'il soit prit en compte au retour.
Bref j'ai lu 1 bouquins et 2 sites internet, chacun passe un peu
differemment et j'ai un peu de mal à mis retrouver.
- Est-ce que le viewstate est global à la page ou spécifique à l'instance
du compo ?
- Comment gérer de manière simple les données du postback ?
Bonjour,Je développe un compo pour asp.net en vb. C'est que l'on appelle un compo
composite.
Pour simplifier j'ai un bouton et un panel. Sur le Onclick du bouton
j'execute une fonction (runat="server") qui rend visible mon panel.
Jusque là tout va bien.
Mon problème réside essentiellement au niveau de la gestion du postback.
Comme vous pouvez vous en douter dès qu'il y a un postback mon panel se
referme tout le temps !
J'ai donc essayé de comprendre le coup des viewstate mais je n'arrive
jamais
à le mettre à jour pour qu'il soit prit en compte au retour.
Bref j'ai lu 1 bouquins et 2 sites internet, chacun passe un peu
differemment et j'ai un peu de mal à mis retrouver.
- Est-ce que le viewstate est global à la page ou spécifique à l'instance
du compo ?
Chaque WebControl a son propre ViewState. Il est composé de ses propres
données + du Viewstate de ses contrôles enfants. Donc en gros il y a un
seul
ViewState, mais chaque contrôle "possède" sa propre partie du ViewState.- Comment gérer de manière simple les données du postback ?
Là je ne comprend pas la question.
Pour votre problème, si le Panel est caché à chaque fois, c'est soit que
vous le cachez vous même (ex dans l'événement Load), soit que vous avez
mis
sa propriété EnableViewState à false, ce qui l'empêche de sauvegarder son
état.
--
Zazar
Bonjour,
Je développe un compo pour asp.net en vb. C'est que l'on appelle un compo
composite.
Pour simplifier j'ai un bouton et un panel. Sur le Onclick du bouton
j'execute une fonction (runat="server") qui rend visible mon panel.
Jusque là tout va bien.
Mon problème réside essentiellement au niveau de la gestion du postback.
Comme vous pouvez vous en douter dès qu'il y a un postback mon panel se
referme tout le temps !
J'ai donc essayé de comprendre le coup des viewstate mais je n'arrive
jamais
à le mettre à jour pour qu'il soit prit en compte au retour.
Bref j'ai lu 1 bouquins et 2 sites internet, chacun passe un peu
differemment et j'ai un peu de mal à mis retrouver.
- Est-ce que le viewstate est global à la page ou spécifique à l'instance
du compo ?
Chaque WebControl a son propre ViewState. Il est composé de ses propres
données + du Viewstate de ses contrôles enfants. Donc en gros il y a un
seul
ViewState, mais chaque contrôle "possède" sa propre partie du ViewState.
- Comment gérer de manière simple les données du postback ?
Là je ne comprend pas la question.
Pour votre problème, si le Panel est caché à chaque fois, c'est soit que
vous le cachez vous même (ex dans l'événement Load), soit que vous avez
mis
sa propriété EnableViewState à false, ce qui l'empêche de sauvegarder son
état.
--
Zazar
Bonjour,Je développe un compo pour asp.net en vb. C'est que l'on appelle un compo
composite.
Pour simplifier j'ai un bouton et un panel. Sur le Onclick du bouton
j'execute une fonction (runat="server") qui rend visible mon panel.
Jusque là tout va bien.
Mon problème réside essentiellement au niveau de la gestion du postback.
Comme vous pouvez vous en douter dès qu'il y a un postback mon panel se
referme tout le temps !
J'ai donc essayé de comprendre le coup des viewstate mais je n'arrive
jamais
à le mettre à jour pour qu'il soit prit en compte au retour.
Bref j'ai lu 1 bouquins et 2 sites internet, chacun passe un peu
differemment et j'ai un peu de mal à mis retrouver.
- Est-ce que le viewstate est global à la page ou spécifique à l'instance
du compo ?
Chaque WebControl a son propre ViewState. Il est composé de ses propres
données + du Viewstate de ses contrôles enfants. Donc en gros il y a un
seul
ViewState, mais chaque contrôle "possède" sa propre partie du ViewState.- Comment gérer de manière simple les données du postback ?
Là je ne comprend pas la question.
Pour votre problème, si le Panel est caché à chaque fois, c'est soit que
vous le cachez vous même (ex dans l'événement Load), soit que vous avez
mis
sa propriété EnableViewState à false, ce qui l'empêche de sauvegarder son
état.
--
Zazar
> A priori mon problème vient du fait que lorsque l'on utilise
CreateChildControl, cette fonction n'est pas rappelée lors du PostBack.
En plus des problèmes d'affichage, j'ai de plus des doutes quant à la
manière de mettre à jour les viewstate.
Tu mêles tout ça à ce que j'ai lu sur les evenements, les postBack (Raise
&
co) et ça donne ma 2ème question :o)
J'avance petit à petit, je vais bientôt être un dieu du compo avec gestion
du PostBack !! En tout cas c'est un peu compliqué mais très interessant
car
cela fait appelle à la façon même de fonctionner d'asp.net !
> A priori mon problème vient du fait que lorsque l'on utilise
CreateChildControl, cette fonction n'est pas rappelée lors du PostBack.
En plus des problèmes d'affichage, j'ai de plus des doutes quant à la
manière de mettre à jour les viewstate.
Tu mêles tout ça à ce que j'ai lu sur les evenements, les postBack (Raise
&
co) et ça donne ma 2ème question :o)
J'avance petit à petit, je vais bientôt être un dieu du compo avec gestion
du PostBack !! En tout cas c'est un peu compliqué mais très interessant
car
cela fait appelle à la façon même de fonctionner d'asp.net !
> A priori mon problème vient du fait que lorsque l'on utilise
CreateChildControl, cette fonction n'est pas rappelée lors du PostBack.
En plus des problèmes d'affichage, j'ai de plus des doutes quant à la
manière de mettre à jour les viewstate.
Tu mêles tout ça à ce que j'ai lu sur les evenements, les postBack (Raise
&
co) et ça donne ma 2ème question :o)
J'avance petit à petit, je vais bientôt être un dieu du compo avec gestion
du PostBack !! En tout cas c'est un peu compliqué mais très interessant
car
cela fait appelle à la façon même de fonctionner d'asp.net !
A priori mon problème vient du fait que lorsque l'on utilise
CreateChildControl, cette fonction n'est pas rappelée lors du PostBack.En plus des problèmes d'affichage, j'ai de plus des doutes quant à la
manière de mettre à jour les viewstate.
Tu mêles tout ça à ce que j'ai lu sur les evenements, les postBack (Raise
&
co) et ça donne ma 2ème question :o)
J'avance petit à petit, je vais bientôt être un dieu du compo avec
gestion
du PostBack !! En tout cas c'est un peu compliqué mais très interessant
car
cela fait appelle à la façon même de fonctionner d'asp.net !
Une autre possibilité qui me vient à l'esprit est que vous recréez
peut-être
le Panel trop tard. En fait, la lecture du ViewState par les composants se
fait juste aprés l'événement Load, donc si vous n'avez votre Panel à la
fin
de l'événement, il ne sera pas à même de récupérer son état.
--
Zazar
A priori mon problème vient du fait que lorsque l'on utilise
CreateChildControl, cette fonction n'est pas rappelée lors du PostBack.
En plus des problèmes d'affichage, j'ai de plus des doutes quant à la
manière de mettre à jour les viewstate.
Tu mêles tout ça à ce que j'ai lu sur les evenements, les postBack (Raise
&
co) et ça donne ma 2ème question :o)
J'avance petit à petit, je vais bientôt être un dieu du compo avec
gestion
du PostBack !! En tout cas c'est un peu compliqué mais très interessant
car
cela fait appelle à la façon même de fonctionner d'asp.net !
Une autre possibilité qui me vient à l'esprit est que vous recréez
peut-être
le Panel trop tard. En fait, la lecture du ViewState par les composants se
fait juste aprés l'événement Load, donc si vous n'avez votre Panel à la
fin
de l'événement, il ne sera pas à même de récupérer son état.
--
Zazar
A priori mon problème vient du fait que lorsque l'on utilise
CreateChildControl, cette fonction n'est pas rappelée lors du PostBack.En plus des problèmes d'affichage, j'ai de plus des doutes quant à la
manière de mettre à jour les viewstate.
Tu mêles tout ça à ce que j'ai lu sur les evenements, les postBack (Raise
&
co) et ça donne ma 2ème question :o)
J'avance petit à petit, je vais bientôt être un dieu du compo avec
gestion
du PostBack !! En tout cas c'est un peu compliqué mais très interessant
car
cela fait appelle à la façon même de fonctionner d'asp.net !
Une autre possibilité qui me vient à l'esprit est que vous recréez
peut-être
le Panel trop tard. En fait, la lecture du ViewState par les composants se
fait juste aprés l'événement Load, donc si vous n'avez votre Panel à la
fin
de l'événement, il ne sera pas à même de récupérer son état.
--
Zazar
> J'avance et j'ai trouvé une méthode. je ne sais pas si c'est tres bien de
faire comme cela mais ça fonctionne.
Au moment de CreateChildControls (assemblage du compo) plutot que de faire
un simple controls.add(new LiteralControl("<div ...")) comme on peut le
dans la plupart des exemples, j'attribue un nom de variable globale à
l'objet LiteralControl pour avoir un pointeur dessus.
Ensuite lors de la fonction OnPreRender (qui se réalise après le
LoadViewState) j'effectue cela :
if viewstate("visible")=true then
objpan="<div... visible"
else
objpan="<div... caché"
end if
> J'avance et j'ai trouvé une méthode. je ne sais pas si c'est tres bien de
faire comme cela mais ça fonctionne.
Au moment de CreateChildControls (assemblage du compo) plutot que de faire
un simple controls.add(new LiteralControl("<div ...")) comme on peut le
dans la plupart des exemples, j'attribue un nom de variable globale à
l'objet LiteralControl pour avoir un pointeur dessus.
Ensuite lors de la fonction OnPreRender (qui se réalise après le
LoadViewState) j'effectue cela :
if viewstate("visible")=true then
objpan="<div... visible"
else
objpan="<div... caché"
end if
> J'avance et j'ai trouvé une méthode. je ne sais pas si c'est tres bien de
faire comme cela mais ça fonctionne.
Au moment de CreateChildControls (assemblage du compo) plutot que de faire
un simple controls.add(new LiteralControl("<div ...")) comme on peut le
dans la plupart des exemples, j'attribue un nom de variable globale à
l'objet LiteralControl pour avoir un pointeur dessus.
Ensuite lors de la fonction OnPreRender (qui se réalise après le
LoadViewState) j'effectue cela :
if viewstate("visible")=true then
objpan="<div... visible"
else
objpan="<div... caché"
end if
J'avance et j'ai trouvé une méthode. je ne sais pas si c'est tres bien de
faire comme cela mais ça fonctionne.
Au moment de CreateChildControls (assemblage du compo) plutot que de
faire
un simple controls.add(new LiteralControl("<div ...")) comme on peut le
voirdans la plupart des exemples, j'attribue un nom de variable globale à
l'objet LiteralControl pour avoir un pointeur dessus.
Ensuite lors de la fonction OnPreRender (qui se réalise après le
LoadViewState) j'effectue cela :
if viewstate("visible")=true then
objpan="<div... visible"
else
objpan="<div... caché"
end if
Evitez autant que possible d'écrire directement du html et utilisez les
objets correspondants.
Dans votre exemple, vous ne devriez pas utiliser de Literal. La bonne
méthode serait de déclarer un Panel comme membre interne de votre
composant.
Ensuite dans votre fonction CreateChildControl(), vous construisez votre
Panel, vous l'affectez à votre membre interne. Tous les composants enfants
de ce panel (ceux que vous voudriez voir dans la balise div) doivent
ensuite
être ajoutés à la collection Controls de votre Panel et non pas de votre
composant.
Ensuite, dans l'événement Load, vous faîtes un this.EnsureChildsExists (je
ne suis pas sûr du nom exact de la méthode) si vous créez sans arrêt les
mêmes enfants, sinon vous surchargez les méthodes LoadVieewState et
SaveViewState pour stocker l'état des objets enfants créés.
Ca a l'air compliqué au 1er abord, mais ça va vous simplifier la vie par
la
suite. La première amélioration que vous pourrez constater que votre Panel
se chargera tout seul de conserver son état.
--
Zazar
J'avance et j'ai trouvé une méthode. je ne sais pas si c'est tres bien de
faire comme cela mais ça fonctionne.
Au moment de CreateChildControls (assemblage du compo) plutot que de
faire
un simple controls.add(new LiteralControl("<div ...")) comme on peut le
voir
dans la plupart des exemples, j'attribue un nom de variable globale à
l'objet LiteralControl pour avoir un pointeur dessus.
Ensuite lors de la fonction OnPreRender (qui se réalise après le
LoadViewState) j'effectue cela :
if viewstate("visible")=true then
objpan="<div... visible"
else
objpan="<div... caché"
end if
Evitez autant que possible d'écrire directement du html et utilisez les
objets correspondants.
Dans votre exemple, vous ne devriez pas utiliser de Literal. La bonne
méthode serait de déclarer un Panel comme membre interne de votre
composant.
Ensuite dans votre fonction CreateChildControl(), vous construisez votre
Panel, vous l'affectez à votre membre interne. Tous les composants enfants
de ce panel (ceux que vous voudriez voir dans la balise div) doivent
ensuite
être ajoutés à la collection Controls de votre Panel et non pas de votre
composant.
Ensuite, dans l'événement Load, vous faîtes un this.EnsureChildsExists (je
ne suis pas sûr du nom exact de la méthode) si vous créez sans arrêt les
mêmes enfants, sinon vous surchargez les méthodes LoadVieewState et
SaveViewState pour stocker l'état des objets enfants créés.
Ca a l'air compliqué au 1er abord, mais ça va vous simplifier la vie par
la
suite. La première amélioration que vous pourrez constater que votre Panel
se chargera tout seul de conserver son état.
--
Zazar
J'avance et j'ai trouvé une méthode. je ne sais pas si c'est tres bien de
faire comme cela mais ça fonctionne.
Au moment de CreateChildControls (assemblage du compo) plutot que de
faire
un simple controls.add(new LiteralControl("<div ...")) comme on peut le
voirdans la plupart des exemples, j'attribue un nom de variable globale à
l'objet LiteralControl pour avoir un pointeur dessus.
Ensuite lors de la fonction OnPreRender (qui se réalise après le
LoadViewState) j'effectue cela :
if viewstate("visible")=true then
objpan="<div... visible"
else
objpan="<div... caché"
end if
Evitez autant que possible d'écrire directement du html et utilisez les
objets correspondants.
Dans votre exemple, vous ne devriez pas utiliser de Literal. La bonne
méthode serait de déclarer un Panel comme membre interne de votre
composant.
Ensuite dans votre fonction CreateChildControl(), vous construisez votre
Panel, vous l'affectez à votre membre interne. Tous les composants enfants
de ce panel (ceux que vous voudriez voir dans la balise div) doivent
ensuite
être ajoutés à la collection Controls de votre Panel et non pas de votre
composant.
Ensuite, dans l'événement Load, vous faîtes un this.EnsureChildsExists (je
ne suis pas sûr du nom exact de la méthode) si vous créez sans arrêt les
mêmes enfants, sinon vous surchargez les méthodes LoadVieewState et
SaveViewState pour stocker l'état des objets enfants créés.
Ca a l'air compliqué au 1er abord, mais ça va vous simplifier la vie par
la
suite. La première amélioration que vous pourrez constater que votre Panel
se chargera tout seul de conserver son état.
--
Zazar
Oui effectivement j'y avez bien pensé ! j'étais sur le point d'implémenter
directement un panel (plutot qu'un div en Literal).
Toutefois je ne vois pas l'interêt d'utiliser EnsureChildsExists dans le
Load puisque les seules objets enfants créés le sont au niveau du
CreateChildControl et donc a priori ne sont recréés à chaque postback.
Tony
"Zazar" a écrit dans le
message de news:J'avance et j'ai trouvé une méthode. je ne sais pas si c'est tres bien
de
faire comme cela mais ça fonctionne.
Au moment de CreateChildControls (assemblage du compo) plutot que de
faire
un simple controls.add(new LiteralControl("<div ...")) comme on peut le
voirdans la plupart des exemples, j'attribue un nom de variable globale à
l'objet LiteralControl pour avoir un pointeur dessus.
Ensuite lors de la fonction OnPreRender (qui se réalise après le
LoadViewState) j'effectue cela :
if viewstate("visible")=true then
objpan="<div... visible"
else
objpan="<div... caché"
end if
Evitez autant que possible d'écrire directement du html et utilisez les
objets correspondants.
Dans votre exemple, vous ne devriez pas utiliser de Literal. La bonne
méthode serait de déclarer un Panel comme membre interne de votre
composant.
Ensuite dans votre fonction CreateChildControl(), vous construisez votre
Panel, vous l'affectez à votre membre interne. Tous les composants
enfants
de ce panel (ceux que vous voudriez voir dans la balise div) doivent
ensuite
être ajoutés à la collection Controls de votre Panel et non pas de votre
composant.
Ensuite, dans l'événement Load, vous faîtes un this.EnsureChildsExists
(je
ne suis pas sûr du nom exact de la méthode) si vous créez sans arrêt les
mêmes enfants, sinon vous surchargez les méthodes LoadVieewState et
SaveViewState pour stocker l'état des objets enfants créés.
Ca a l'air compliqué au 1er abord, mais ça va vous simplifier la vie par
la
suite. La première amélioration que vous pourrez constater que votre
Panel
se chargera tout seul de conserver son état.
--
Zazar
Oui effectivement j'y avez bien pensé ! j'étais sur le point d'implémenter
directement un panel (plutot qu'un div en Literal).
Toutefois je ne vois pas l'interêt d'utiliser EnsureChildsExists dans le
Load puisque les seules objets enfants créés le sont au niveau du
CreateChildControl et donc a priori ne sont recréés à chaque postback.
Tony
"Zazar" <DILAVNI.nicolas.prats@iie.cnam.fr.INVALID> a écrit dans le
message de news: eB3dyD55EHA.4004@tk2msftngp13.phx.gbl...
J'avance et j'ai trouvé une méthode. je ne sais pas si c'est tres bien
de
faire comme cela mais ça fonctionne.
Au moment de CreateChildControls (assemblage du compo) plutot que de
faire
un simple controls.add(new LiteralControl("<div ...")) comme on peut le
voir
dans la plupart des exemples, j'attribue un nom de variable globale à
l'objet LiteralControl pour avoir un pointeur dessus.
Ensuite lors de la fonction OnPreRender (qui se réalise après le
LoadViewState) j'effectue cela :
if viewstate("visible")=true then
objpan="<div... visible"
else
objpan="<div... caché"
end if
Evitez autant que possible d'écrire directement du html et utilisez les
objets correspondants.
Dans votre exemple, vous ne devriez pas utiliser de Literal. La bonne
méthode serait de déclarer un Panel comme membre interne de votre
composant.
Ensuite dans votre fonction CreateChildControl(), vous construisez votre
Panel, vous l'affectez à votre membre interne. Tous les composants
enfants
de ce panel (ceux que vous voudriez voir dans la balise div) doivent
ensuite
être ajoutés à la collection Controls de votre Panel et non pas de votre
composant.
Ensuite, dans l'événement Load, vous faîtes un this.EnsureChildsExists
(je
ne suis pas sûr du nom exact de la méthode) si vous créez sans arrêt les
mêmes enfants, sinon vous surchargez les méthodes LoadVieewState et
SaveViewState pour stocker l'état des objets enfants créés.
Ca a l'air compliqué au 1er abord, mais ça va vous simplifier la vie par
la
suite. La première amélioration que vous pourrez constater que votre
Panel
se chargera tout seul de conserver son état.
--
Zazar
Oui effectivement j'y avez bien pensé ! j'étais sur le point d'implémenter
directement un panel (plutot qu'un div en Literal).
Toutefois je ne vois pas l'interêt d'utiliser EnsureChildsExists dans le
Load puisque les seules objets enfants créés le sont au niveau du
CreateChildControl et donc a priori ne sont recréés à chaque postback.
Tony
"Zazar" a écrit dans le
message de news:J'avance et j'ai trouvé une méthode. je ne sais pas si c'est tres bien
de
faire comme cela mais ça fonctionne.
Au moment de CreateChildControls (assemblage du compo) plutot que de
faire
un simple controls.add(new LiteralControl("<div ...")) comme on peut le
voirdans la plupart des exemples, j'attribue un nom de variable globale à
l'objet LiteralControl pour avoir un pointeur dessus.
Ensuite lors de la fonction OnPreRender (qui se réalise après le
LoadViewState) j'effectue cela :
if viewstate("visible")=true then
objpan="<div... visible"
else
objpan="<div... caché"
end if
Evitez autant que possible d'écrire directement du html et utilisez les
objets correspondants.
Dans votre exemple, vous ne devriez pas utiliser de Literal. La bonne
méthode serait de déclarer un Panel comme membre interne de votre
composant.
Ensuite dans votre fonction CreateChildControl(), vous construisez votre
Panel, vous l'affectez à votre membre interne. Tous les composants
enfants
de ce panel (ceux que vous voudriez voir dans la balise div) doivent
ensuite
être ajoutés à la collection Controls de votre Panel et non pas de votre
composant.
Ensuite, dans l'événement Load, vous faîtes un this.EnsureChildsExists
(je
ne suis pas sûr du nom exact de la méthode) si vous créez sans arrêt les
mêmes enfants, sinon vous surchargez les méthodes LoadVieewState et
SaveViewState pour stocker l'état des objets enfants créés.
Ca a l'air compliqué au 1er abord, mais ça va vous simplifier la vie par
la
suite. La première amélioration que vous pourrez constater que votre
Panel
se chargera tout seul de conserver son état.
--
Zazar
ça marche nickel ! effectivement le panel gère son viwstate tout seul
un grand ce qui a supprimé pas de lignes et de fonctions inutiles dans mon
compo.
Je suis en train d'ajouter des propriétés à mon composant.
D'ailleurs une question se pose : comment gère t-on le système des request
En gros si je poste mon formulaire vers une autre page, que retourne le
controle si je fais request("moncompo") ?
encore merci
"TOny" <tony_barret@(no_spam)hotmail.com> a écrit dans le message de news:
> Oui effectivement j'y avez bien pensé ! j'étais sur le point
> directement un panel (plutot qu'un div en Literal).
> Toutefois je ne vois pas l'interêt d'utiliser EnsureChildsExists dans le
> Load puisque les seules objets enfants créés le sont au niveau du
> CreateChildControl et donc a priori ne sont recréés à chaque postback.
>
> Tony
>
> "Zazar" a écrit dans le
> message de news:
>>
>>> J'avance et j'ai trouvé une méthode. je ne sais pas si c'est tres bien
>>> de
>>> faire comme cela mais ça fonctionne.
>>> Au moment de CreateChildControls (assemblage du compo) plutot que de
>>> faire
>>> un simple controls.add(new LiteralControl("<div ...")) comme on peut
>> voir
>>> dans la plupart des exemples, j'attribue un nom de variable globale à
>>> l'objet LiteralControl pour avoir un pointeur dessus.
>>> Ensuite lors de la fonction OnPreRender (qui se réalise après le
>>> LoadViewState) j'effectue cela :
>>> if viewstate("visible")=true then
>>> objpan="<div... visible"
>>> else
>>> objpan="<div... caché"
>>> end if
>>
>> Evitez autant que possible d'écrire directement du html et utilisez les
>> objets correspondants.
>> Dans votre exemple, vous ne devriez pas utiliser de Literal. La bonne
>> méthode serait de déclarer un Panel comme membre interne de votre
>> composant.
>> Ensuite dans votre fonction CreateChildControl(), vous construisez
>> Panel, vous l'affectez à votre membre interne. Tous les composants
>> enfants
>> de ce panel (ceux que vous voudriez voir dans la balise div) doivent
>> ensuite
>> être ajoutés à la collection Controls de votre Panel et non pas de
>> composant.
>> Ensuite, dans l'événement Load, vous faîtes un this.EnsureChildsExists
>> (je
>> ne suis pas sûr du nom exact de la méthode) si vous créez sans arrêt
>> mêmes enfants, sinon vous surchargez les méthodes LoadVieewState et
>> SaveViewState pour stocker l'état des objets enfants créés.
>> Ca a l'air compliqué au 1er abord, mais ça va vous simplifier la vie
>> la
>> suite. La première amélioration que vous pourrez constater que votre
>> Panel
>> se chargera tout seul de conserver son état.
>>
>> --
>> Zazar
>>
>>
>
>
ça marche nickel ! effectivement le panel gère son viwstate tout seul
un grand ce qui a supprimé pas de lignes et de fonctions inutiles dans mon
compo.
Je suis en train d'ajouter des propriétés à mon composant.
D'ailleurs une question se pose : comment gère t-on le système des request
En gros si je poste mon formulaire vers une autre page, que retourne le
controle si je fais request("moncompo") ?
encore merci
"TOny" <tony_barret@(no_spam)hotmail.com> a écrit dans le message de news:
u5SzVgA6EHA.4004@tk2msftngp13.phx.gbl...
> Oui effectivement j'y avez bien pensé ! j'étais sur le point
> directement un panel (plutot qu'un div en Literal).
> Toutefois je ne vois pas l'interêt d'utiliser EnsureChildsExists dans le
> Load puisque les seules objets enfants créés le sont au niveau du
> CreateChildControl et donc a priori ne sont recréés à chaque postback.
>
> Tony
>
> "Zazar" <DILAVNI.nicolas.prats@iie.cnam.fr.INVALID> a écrit dans le
> message de news: eB3dyD55EHA.4004@tk2msftngp13.phx.gbl...
>>
>>> J'avance et j'ai trouvé une méthode. je ne sais pas si c'est tres bien
>>> de
>>> faire comme cela mais ça fonctionne.
>>> Au moment de CreateChildControls (assemblage du compo) plutot que de
>>> faire
>>> un simple controls.add(new LiteralControl("<div ...")) comme on peut
>> voir
>>> dans la plupart des exemples, j'attribue un nom de variable globale à
>>> l'objet LiteralControl pour avoir un pointeur dessus.
>>> Ensuite lors de la fonction OnPreRender (qui se réalise après le
>>> LoadViewState) j'effectue cela :
>>> if viewstate("visible")=true then
>>> objpan="<div... visible"
>>> else
>>> objpan="<div... caché"
>>> end if
>>
>> Evitez autant que possible d'écrire directement du html et utilisez les
>> objets correspondants.
>> Dans votre exemple, vous ne devriez pas utiliser de Literal. La bonne
>> méthode serait de déclarer un Panel comme membre interne de votre
>> composant.
>> Ensuite dans votre fonction CreateChildControl(), vous construisez
>> Panel, vous l'affectez à votre membre interne. Tous les composants
>> enfants
>> de ce panel (ceux que vous voudriez voir dans la balise div) doivent
>> ensuite
>> être ajoutés à la collection Controls de votre Panel et non pas de
>> composant.
>> Ensuite, dans l'événement Load, vous faîtes un this.EnsureChildsExists
>> (je
>> ne suis pas sûr du nom exact de la méthode) si vous créez sans arrêt
>> mêmes enfants, sinon vous surchargez les méthodes LoadVieewState et
>> SaveViewState pour stocker l'état des objets enfants créés.
>> Ca a l'air compliqué au 1er abord, mais ça va vous simplifier la vie
>> la
>> suite. La première amélioration que vous pourrez constater que votre
>> Panel
>> se chargera tout seul de conserver son état.
>>
>> --
>> Zazar
>>
>>
>
>
ça marche nickel ! effectivement le panel gère son viwstate tout seul
un grand ce qui a supprimé pas de lignes et de fonctions inutiles dans mon
compo.
Je suis en train d'ajouter des propriétés à mon composant.
D'ailleurs une question se pose : comment gère t-on le système des request
En gros si je poste mon formulaire vers une autre page, que retourne le
controle si je fais request("moncompo") ?
encore merci
"TOny" <tony_barret@(no_spam)hotmail.com> a écrit dans le message de news:
> Oui effectivement j'y avez bien pensé ! j'étais sur le point
> directement un panel (plutot qu'un div en Literal).
> Toutefois je ne vois pas l'interêt d'utiliser EnsureChildsExists dans le
> Load puisque les seules objets enfants créés le sont au niveau du
> CreateChildControl et donc a priori ne sont recréés à chaque postback.
>
> Tony
>
> "Zazar" a écrit dans le
> message de news:
>>
>>> J'avance et j'ai trouvé une méthode. je ne sais pas si c'est tres bien
>>> de
>>> faire comme cela mais ça fonctionne.
>>> Au moment de CreateChildControls (assemblage du compo) plutot que de
>>> faire
>>> un simple controls.add(new LiteralControl("<div ...")) comme on peut
>> voir
>>> dans la plupart des exemples, j'attribue un nom de variable globale à
>>> l'objet LiteralControl pour avoir un pointeur dessus.
>>> Ensuite lors de la fonction OnPreRender (qui se réalise après le
>>> LoadViewState) j'effectue cela :
>>> if viewstate("visible")=true then
>>> objpan="<div... visible"
>>> else
>>> objpan="<div... caché"
>>> end if
>>
>> Evitez autant que possible d'écrire directement du html et utilisez les
>> objets correspondants.
>> Dans votre exemple, vous ne devriez pas utiliser de Literal. La bonne
>> méthode serait de déclarer un Panel comme membre interne de votre
>> composant.
>> Ensuite dans votre fonction CreateChildControl(), vous construisez
>> Panel, vous l'affectez à votre membre interne. Tous les composants
>> enfants
>> de ce panel (ceux que vous voudriez voir dans la balise div) doivent
>> ensuite
>> être ajoutés à la collection Controls de votre Panel et non pas de
>> composant.
>> Ensuite, dans l'événement Load, vous faîtes un this.EnsureChildsExists
>> (je
>> ne suis pas sûr du nom exact de la méthode) si vous créez sans arrêt
>> mêmes enfants, sinon vous surchargez les méthodes LoadVieewState et
>> SaveViewState pour stocker l'état des objets enfants créés.
>> Ca a l'air compliqué au 1er abord, mais ça va vous simplifier la vie
>> la
>> suite. La première amélioration que vous pourrez constater que votre
>> Panel
>> se chargera tout seul de conserver son état.
>>
>> --
>> Zazar
>>
>>
>
>
Je suis en train d'ajouter des propriétés à mon composant.
D'ailleurs une question se pose : comment gère t-on le système des
request ? En gros si je poste mon formulaire vers une autre page, que
retourne le controle si je fais request("moncompo") ?
Je suis en train d'ajouter des propriétés à mon composant.
D'ailleurs une question se pose : comment gère t-on le système des
request ? En gros si je poste mon formulaire vers une autre page, que
retourne le controle si je fais request("moncompo") ?
Je suis en train d'ajouter des propriétés à mon composant.
D'ailleurs une question se pose : comment gère t-on le système des
request ? En gros si je poste mon formulaire vers une autre page, que
retourne le controle si je fais request("moncompo") ?