Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

nom de controle dynamique : possible ?

14 réponses
Avatar
slambert
Bonjour les gens

Cette question doit très certainement etre un classique, mais je n'ai pas
trouvé de référence à une quelconque faq dans les 800 messages que mon
brouteur vient de charger sur ce news.

J'aimerais savoir s'il est possible de définir dynamiquement le nom d'un
controle qui doit etre chargé dans une page html.

Je m'explique : en PHP par exemple, on travaille avec des includes. Il est
possible de faire varier la valeur de ces includes en fonction d'un
parametre recu [apres les necessaires verif de securité of course.]. Cela
permet de vraiment eviter la duplication du code html et de se reposer sur
un "template" unique.

Or, dans le projet sur lequel je travaille [.net 1.0 + c#], les template
sont fait sous dreamweaver [bouarf...], et donc toutes les pages aspx ont
beaucoup, beaucoup de html en commun.... Et bien sur, regulierement, l'ne
des pages explose car un <td> a saute, etc.... J'en suis arrive à la
conclusion que ce systeme de duplication de template à la dreamqwaever like
n'etait pas satisfaisant. J'aimerais definr une page d'entree , toujorus la
meme, et changer le contenu de header footer leftMenu ContentCenter etc...
en fontion d'un param contextuel.

Mais avant tout, j'aimerais demander l'avis des spécialistes siur la
question.

Le but n'est pas DU TOUT de troller, juste de s'orienter vers la meilleure
pratique possible. Surtout qu'il me semble que parfois, les objets ont du
mal à se voir d'un control à un autre.

Voila voila, merci d'avance !

@ ++

Stef

10 réponses

1 2
Avatar
Paul Bacelar
Je ne suis pas sur de tout comprendre, mais si c'est pour avoir des
décorations de pages dynamiques, le plus simple est de mettre des contrôles
PlaceHolder aux endroits qui changent de décoration et de les remplacer par
les contrôles appropriés de manière dynamiques.
--
Paul Bacelar
MVP VC++


"slambert" wrote in message
news:44d61ede$0$8256$
Bonjour les gens

Cette question doit très certainement etre un classique, mais je n'ai pas
trouvé de référence à une quelconque faq dans les 800 messages que mon
brouteur vient de charger sur ce news.

J'aimerais savoir s'il est possible de définir dynamiquement le nom d'un
controle qui doit etre chargé dans une page html.

Je m'explique : en PHP par exemple, on travaille avec des includes. Il est
possible de faire varier la valeur de ces includes en fonction d'un
parametre recu [apres les necessaires verif de securité of course.]. Cela
permet de vraiment eviter la duplication du code html et de se reposer sur
un "template" unique.

Or, dans le projet sur lequel je travaille [.net 1.0 + c#], les template
sont fait sous dreamweaver [bouarf...], et donc toutes les pages aspx ont
beaucoup, beaucoup de html en commun.... Et bien sur, regulierement, l'ne
des pages explose car un <td> a saute, etc.... J'en suis arrive à la
conclusion que ce systeme de duplication de template à la dreamqwaever
like n'etait pas satisfaisant. J'aimerais definr une page d'entree ,
toujorus la meme, et changer le contenu de header footer leftMenu
ContentCenter etc... en fontion d'un param contextuel.

Mais avant tout, j'aimerais demander l'avis des spécialistes siur la
question.

Le but n'est pas DU TOUT de troller, juste de s'orienter vers la meilleure
pratique possible. Surtout qu'il me semble que parfois, les objets ont du
mal à se voir d'un control à un autre.

Voila voila, merci d'avance !

@ ++

Stef



Avatar
slambert
> Je ne suis pas sur de tout comprendre, mais si c'est pour avoir des
décorations de pages dynamiques, le plus simple est de mettre des
contrôles PlaceHolder aux endroits qui changent de décoration et de les
remplacer par les contrôles appropriés de manière dynamiques.



Presque. Avec le PlaceHolder , je peux changer le contenu d'une zone par
l'element voulu.

Mais moi, je voudrais changer le contenu d'une zone par un gros bloc d'aspx.

Exemple:

là, tu as une page type avec un header, un left menu, et un footer donné.
Moi, je veux changer pouvoir changer de header, footer, etc, ..., en
fonction d'un parametre. Comme cela, toutes mes urls seront de la forme
Default.aspx?page=mapage , et en fonction de la valeur contenue dans page,
je charge les controles que je veux aux bons endroits. Et là, finis la
duplication abusive du code HTML.


<%@ Register TagPrefix="truc" TagName="header" Src="controls/HeaderOne.ascx"
%>
<%@ Register TagPrefix="truc" TagName="leftMenu"
Src="controls/leftMenuOne.ascx" %>
<%@ Register TagPrefix="truc" TagName="centralContent"
Src="controls/centralContent.ascx" %>
<%@ Register TagPrefix="truc" TagName="Footer" Src="controls/FooterOne.ascx"
%>
<table>
<tr>
<td colspan='2'>
<truc:header id="Header" runat="server"></truc:header>
</td>
</tr><tr>
<td>
<truc:leftMenu id="leftMenu" runat="server"></truc:leftMenu>
</td>
<td>
<truc:centralContent id="centralContent"
runat="server"></truc:centralContent>
</td>
</td>
</tr><tr>
<td colspan='2'>
<truc:footer id="Footer" runat="server"></truc:footer>
</td>
</tr>
</table>
Avatar
Paul Bacelar
Je ne comprends pas votre objection?

Lors du Load de la page vous vérifié le paramètre de la page et vous
instanciez les user ou customcontrol que vous placez dans les PlaceHolder
correspondant.

Tout est dynamique et il n'y a pas de duplication de code.
--
Paul Bacelar
MVP VC++


"slambert" wrote in message
news:44d65df2$0$8230$
Je ne suis pas sur de tout comprendre, mais si c'est pour avoir des
décorations de pages dynamiques, le plus simple est de mettre des
contrôles PlaceHolder aux endroits qui changent de décoration et de les
remplacer par les contrôles appropriés de manière dynamiques.



Presque. Avec le PlaceHolder , je peux changer le contenu d'une zone par
l'element voulu.

Mais moi, je voudrais changer le contenu d'une zone par un gros bloc
d'aspx.

Exemple:

là, tu as une page type avec un header, un left menu, et un footer donné.
Moi, je veux changer pouvoir changer de header, footer, etc, ..., en
fonction d'un parametre. Comme cela, toutes mes urls seront de la forme
Default.aspx?page=mapage , et en fonction de la valeur contenue dans page,
je charge les controles que je veux aux bons endroits. Et là, finis la
duplication abusive du code HTML.


<%@ Register TagPrefix="truc" TagName="header"
Src="controls/HeaderOne.ascx" %>
<%@ Register TagPrefix="truc" TagName="leftMenu"
Src="controls/leftMenuOne.ascx" %>
<%@ Register TagPrefix="truc" TagName="centralContent"
Src="controls/centralContent.ascx" %>
<%@ Register TagPrefix="truc" TagName="Footer"
Src="controls/FooterOne.ascx" %>
<table>
<tr>
<td colspan='2'>
<truc:header id="Header" runat="server"></truc:header>
</td>
</tr><tr>
<td>
<truc:leftMenu id="leftMenu" runat="server"></truc:leftMenu>
</td>
<td>
<truc:centralContent id="centralContent"
runat="server"></truc:centralContent>
</td>
</td>
</tr><tr>
<td colspan='2'>
<truc:footer id="Footer" runat="server"></truc:footer>
</td>
</tr>
</table>



Avatar
slambert
> Je ne comprends pas votre objection?



Parcequ'il y a quelque chose que je ne dois pas bien voir.


Lors du Load de la page vous vérifié le paramètre de la page et vous
instanciez les user ou customcontrol que vous placez dans les PlaceHolder
correspondant.



Je peux vraiment faire cela ? Aller chercher un fichier aspx [avec son .cs
associé] et l'inclure là ou j'ai place mon PlaceHolder dans mon template ?
Je ne suis pas limité à faire des betes add(simple element html) ?


Tout est dynamique et il n'y a pas de duplication de code.



Si oui, mon soucis est resolu : un tableau de hash pour associer le fichier
à inclure en fonction du param pour telle ou telle zone, et c'est gagné.

@++

Stef
Avatar
slambert
> Je ne comprends pas votre objection?
Lors du Load de la page vous vérifié le paramètre de la page et vous
instanciez les user ou customcontrol que vous placez dans les PlaceHolder
correspondant.



Ca ne marche pas: je tente de charger une page ascx qui herite de son cs, et
ca ne marche pas.

Ce n'est pas aussi simple. Ce ne sont pas que des elements html qu'il faut
inclure, ce sont des briques de l'application.

En fait, il faudrait que je puisse indiquer dynamiquement le nom ou la
source du Register que j'appelle. Et ca, j'arrive pas à le faire avec un
PlaceHolder.

@ ++

Stef
Avatar
Simon Mourier [SoftFluent]
ASP.NET est 100% orienté objet à la base, et 99% est programmable, sauf que
ça ne se voit pas forcément quand on regarde juste les ASCX, les ASPX etc...
Le moteur d'ASP.NET parse des fichiers, en crée des .CS, les compile, et
utilise ensuite cette assembly pour faire le rendu des pages. Tout élement
HTML rendu par ASP.NET correspond à l'appel d'une méthode d'un objet compilé
dynamiquement par ASP.NET, ou manuellement par le développeur.

Les classes de base d'ASP.NET (concernant le rendu HTML) sont Control,
WebControl, et Page (les deux dernières dérivent de Control d'ailleurs).
Tout part de ça. Tous les autres contrôles dérivent et utilisent ceux là ou
leurs dérivés, et on peut les manipuler programmatiquement, ce qui peut
conceptuellement se comparer aux includes (PHP, ASP ou autres) sauf que
c'est à mon avis bien plus puissant et élégant, mais il faut bien en
comprendre le fonctionnement (notions de ControlBuilders, Templates, comment
fonctionne le parsing, le control lifecycle, etc...)

Il faut que vous lisiez un peu la documentation ASP.NET et notamment les
QuickStarts pour bien comprendre ce mécanisme, et ça m'étonnerait que vous
n'arriviez pas à faire ce que vous souhaitez.

http://samples.gotdotnet.com/quickstart/aspplus/doc/webctrlauthoring.aspx
http://www.nikhilk.net/Content%5CPresentations%5CTechEd2003_DEV401.ppt
http://www.microsoft.com/mspress/books/index/5728.asp
http://www.aspnetpro.com/newsletterarticle/2006/05/asp200605de_l/asp200605de_l.asp
http://www.code-magazine.com/Article.aspx?quickid11061
http://www.15seconds.com/issue/020102.htm

Simon.
www.softfluent.com


"slambert" a écrit dans le message de news:
44d7acee$0$13458$
Je ne comprends pas votre objection?
Lors du Load de la page vous vérifié le paramètre de la page et vous
instanciez les user ou customcontrol que vous placez dans les PlaceHolder
correspondant.



Ca ne marche pas: je tente de charger une page ascx qui herite de son cs,
et ca ne marche pas.

Ce n'est pas aussi simple. Ce ne sont pas que des elements html qu'il faut
inclure, ce sont des briques de l'application.

En fait, il faudrait que je puisse indiquer dynamiquement le nom ou la
source du Register que j'appelle. Et ca, j'arrive pas à le faire avec un
PlaceHolder.

@ ++

Stef





Avatar
Kalan
slambert a écrit :

Or, dans le projet sur lequel je travaille [.net 1.0 + c#], les template
sont fait sous dreamweaver [bouarf...], et donc toutes les pages aspx ont
beaucoup, beaucoup de html en commun.... Et bien sur, regulierement, l'ne
des pages explose car un <td> a saute, etc.... J'en suis arrive à la
conclusion que ce systeme de duplication de template à la dreamqwaever like
n'etait pas satisfaisant. J'aimerais definr une page d'entree , toujorus la
meme, et changer le contenu de header footer leftMenu ContentCenter etc...
en fontion d'un param contextuel.



Bonjour,

je crois comprendre ton besoin. En PHP, je crois que nous appelons ca du
"pseudo-frame". Une seule page et des 'include' dont le nom de fichier
dépend de paramètres passés, par exemple, dans l'URL.

Avec .NET2, tu as ce que l'on appelle les "Master-Page". Ca te permet de
définir des templates et de faire dériver chaque page ASPX d'un template
donné. Le HTML commun n'est donc pas à reproduire et tout changement du
template est immédiatemenbt appliqué aux pages.

Si tu n'as pas lapossibilité de passer en .NET2, moi j'avais utilisé les
ascx. Voici un exemple de code pour les charger (en fait, ca se charge
dnas le code behind).

J'ai une unique page : main.aspx qui contient des 'placeholder' aux
endroits où, en PHP, je ferais un include dynamique.

Dans le load de la page main, j'appelle ma fonction SetContent (dont le
paramètre me permettra de chargé les bons contrôles ascx).

void SetContent(string menu)
{
switch (menu)
{
case "news":
lblTitreDroit.Text = "News";
// C'est simplement le texte de titre du bandeau droit contenu in fine
// dans l'ascx "ContenuDroit";

ContenuDroit.Controls.Remove(ContenuDroit.FindControl("news"));

//suppression du controle si déjà en place dans le PH "ContenuDroit"
try
{
UserControl news = (UserControl)LoadControl("news.ascx");
// C'est ici que je charge le bon ascx
news.ID = "news";
ContenuDroit.Controls.Add (news);
//Hop, j'ajoute l'acsx
}
catch (Exception)
{
... Le reste c'est du même ordre



En espérant avoir pu t'aider.


Cyril
Avatar
slambert
> Avec .NET2, tu as ce que l'on appelle les "Master-Page". Ca te permet de
définir des templates et de faire dériver chaque page ASPX d'un template
donné. Le HTML commun n'est donc pas à reproduire et tout changement du
template est immédiatemenbt appliqué aux pages.

.......



Que cela est mignon. J'aime beaucoup !

Merci encore.

Rgds.

SL
Avatar
slambert
> ASP.NET est 100% orienté objet à la base, et 99% est programmable,



Oui, merci...

Rgds,

SL
Avatar
Simon Mourier [SoftFluent]
Ah. Pardon de vous faire perdre votre temps.

"slambert" a écrit dans le message de news:
44dad2fe$0$30141$
ASP.NET est 100% orienté objet à la base, et 99% est programmable,



Oui, merci...

Rgds,

SL



1 2