[C#] Techniques des pseudo-frames ? [Presque résolu]

Techniques des pseudo-frames ? [Presque résolu] [C#] - C#/.NET managed - Programmation

Marsh Posté le 05-05-2004 à 11:21:24    

Bonjour à tous,
 
J'ai deja code pas mal de site en php avec bases mysql etc, et où j'utilisais la technique des pseudo-frames: bien sur cela se fesait de manière visible car l'url etait du type http://monsite.com/index.php?page=3
Ensuite index.php fesait un include de la page ayant l'id no3...
Comment procede t'on en C#.NET ? Est-il possible de le faire de facon transparante ? (C'est a dire en cachant le parametre de l'url...) Est-il possible d'utiliser cette technique avec plusieurs dossiers (ex: http://monsite.com/dossier1/  http://monsite.com/dossier2/) ?
Ou peut on specifier a IIS (je suis sous Xp Pro) d'ouvrir default.aspx par defaut et non pas error403 ?
 
Merci de m'eclaircir sur tout ces points sombre, je vous en serais tres reconnaissant ;)


Message édité par totokick le 07-05-2004 à 15:33:44

---------------
"Un voyage de plusieurs milliers de kilometres commence par un simple pas"
Reply

Marsh Posté le 05-05-2004 à 11:21:24   

Reply

Marsh Posté le 05-05-2004 à 11:34:35    

les includes avec .NET se font à l'aide des UserControl
 
a+

Reply

Marsh Posté le 05-05-2004 à 11:37:24    

Ok, merci pour l'info je regarde ca, j'ai un bouquin en anglais du style apprennez l'asp en 21 jours.
Je repost ici si j'ai un probleme


---------------
"Un voyage de plusieurs milliers de kilometres commence par un simple pas"
Reply

Marsh Posté le 05-05-2004 à 11:38:34    

pour aller plus loin, je dirai des PlaceHolder dans lequel tu charges des UserControls... c plus joli :)

Reply

Marsh Posté le 05-05-2004 à 12:04:54    

(Actuellement penché sur les PlaceHolder's)
J'ai deux autres petites questions:
-Comment on fait pour que IIS ouvre default.apsx par defaut?
-Une fois que j'aurais bien pige, qui serait interessé pour que je fasse un tutoriel?


---------------
"Un voyage de plusieurs milliers de kilometres commence par un simple pas"
Reply

Marsh Posté le 05-05-2004 à 15:34:32    

J'ai reussi a faire cohabite du code:
 
home.aspx

Code :
  1. <%@ Register TagPrefix="WebBook" TagName="Calendar" src="christmas.ascx" %>
  2. <%@ Register TagPrefix="WebBook" TagName="AcmeText" src="simple.ascx" %>
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >  
  4. <html>
  5.   <head>
  6.     <title>Home Page</title>
  7.   </head>
  8.   <body>
  9. <form runat="server">
  10.  <table>
  11.   <tr>
  12.    <td valign="top"><WebBook:AcmeText runat="server"/>
  13.     <p>Use the calendar to see when is christmas</p>
  14.    </td>
  15.    <td><WebBook:Calendar runat="server" id="customCal"/></td>
  16.   </tr>
  17.  </table>
  18. </form>
  19.   </body>
  20. </html>


 
simple.ascx

Code :
  1. <h2>Acme Widgets Inc</h2>
  2. <p>At acme widgets, we can satisfy all of your shopping needs.</p>


 
christmas.ascx

Code :
  1. <%@ Control Codebehind="christmas.cs" Inherits="christmas" %>
  2. <asp:Calendar id="cal" runat="server" OnSelectionChanged="calcDaysLeft" />
  3. <asp:DropDownList ID="year" Runat="server">
  4. <asp:ListItem>1984</asp:ListItem>
  5. <asp:ListItem>1988</asp:ListItem>
  6. <asp:ListItem>1992</asp:ListItem>
  7. <asp:ListItem>1996</asp:ListItem>
  8. <asp:ListItem>2000</asp:ListItem>
  9. <asp:ListItem>2004</asp:ListItem>
  10. <asp:ListItem>2020</asp:ListItem>
  11. </asp:DropDownList>
  12. <asp:Button ID="yearSel" OnClick="selectYear" Text="Change Year" Runat="server"/>
  13. <hr />
  14. <asp:Label ID="daysLeft" Font-Size="18pt" Runat="server"/>
  15. <hr/>


 
et enfin christmas.cs

Code :
  1. using System;
  2. using System.Web.UI;
  3. using System.Web.UI.WebControls;
  4. public class christmas : UserControl
  5. {
  6.  public Calendar cal;
  7.  public DropDownList year;
  8.  public Label daysLeft;
  9.  public void selectYear(Object sender, EventArgs e)
  10.  {
  11.   String s = year.SelectedItem.Text;
  12.   int nY = Int32.Parse(s);
  13.   cal.VisibleDate = new DateTime(nY,cal.SelectedDate.Month, cal.SelectedDate.Day);
  14.  }
  15.  public void calcDaysLeft(Object sender, EventArgs e)
  16.  {
  17.   DateTime ds = cal.SelectedDate;
  18.   DateTime dc = new DateTime(ds.Year,12,25);
  19.   if(dc<ds)
  20.    daysLeft.Text = "T'as loupe noel, sois pas deg";
  21.   else
  22.   {
  23.    TimeSpan ts = dc - ds;
  24.    daysLeft.Text = "Il te reste "+ ts.Days.ToString() +" jour(s) avant noel";
  25.   }
  26.  }
  27. }


 
Donc je suis content, ca marche !!
Par contre je me suis servi des UserControl et pas des PlaceHolders, j'ai rien trouve a ce sujet... vous pouvez m'eclairer?
Idem pour que default.aspx soit ouvert par defaut: Je suis oblige de faire http://localhost/monsite/default.aspx pour afficher default.aspx car http://localhost/monsite/ m'amene a une erreur 403, you are not authorised to view this page..
 
Merci encore


Message édité par totokick le 05-05-2004 à 15:36:39

---------------
"Un voyage de plusieurs milliers de kilometres commence par un simple pas"
Reply

Marsh Posté le 05-05-2004 à 15:40:14    

pour l'erreur 403 c dans la config iis mais j'ai pas iis installé sur mon poste là dc je peux plus te dire vraiment où c'est... il me semble que c là où tu manages tes sites internet... tu peux pour chaque site de ton serveur indiquer quelle est la page par défaut !
 
effectivement là ton truc marche bien mais... si tu veux que ta page affiche un coup tel contrôle si page=1, un autre contrôle si page = 2 tu vas devoir les mettre tous sur ta page et jouer sur la propriété visible...
alors que si tu mets un placeHolder, dans le code-behind, tu testes la valeur de page et après suivant cette valeur, tu loades le usercontrol approprié en dynamique grâce à un truc comme tonPlaceHolder.Controls.add(LoadControl("tonUserControle.ascx" ));
c pas tout à fait ça mais pas loin...

Reply

Marsh Posté le 05-05-2004 à 15:49:56    

Il me semblait bien qu'il fallait configurer IIS, simplement, je suis pas administrateur de la machine, je vais essayer de negocier ca avec ma tutrice de stage ;o) Donc je m'occuperai de ca plus tard :)

titione a écrit :


effectivement là ton truc marche bien mais... si tu veux que ta page affiche un coup tel contrôle si page=1, un autre contrôle si page = 2 tu vas devoir les mettre tous sur ta page et jouer sur la propriété visible...
alors que si tu mets un placeHolder, dans le code-behind, tu testes la valeur de page et après suivant cette valeur, tu loades le usercontrol approprié en dynamique grâce à un truc comme tonPlaceHolder.Controls.add(LoadControl("tonUserControle.ascx" ));
c pas tout à fait ça mais pas loin...


Certes, je vois bien que c'est pas tres commode ce que j'ai fait, car effectivement il faut tout charger...  
ce que tu appelles controls, c'est les fichiers .ascx, n'est ce pas?
Je n'ai pas trouve de doc sur mon bouquin concernant les placeHolders... y'a t'il des tutos sympa sur le net les concernants?
Et serait-ce trop demander une chtite source (un template) qui contienne un placeHolder, ainsi que la definition de ce placeHolder?
 
Merci d'avance encore, des que j'ai un truc qui marche, je poste les sources histoire que ca ne serve pas qu'a moi  :)


Message édité par totokick le 05-05-2004 à 15:50:53

---------------
"Un voyage de plusieurs milliers de kilometres commence par un simple pas"
Reply

Marsh Posté le 05-05-2004 à 17:23:59    

euh nan... j'ai pas grand chose là dessus... le coup des placeholders dans lequel on load les usercontroles (que j'appelle controle effectivement) c un truc qu'on a fait sur un précédent projet mais j'ai rien sur moi (en mission ailleurs actuellement)
je regarderai si je trouve des trucs quand même...
c clair les placeholders c pas bien connu pourtant c vraiment bien et ça respecte le w3c (à la différence des panel...)
edit :  
http://msdn.microsoft.com/library/ [...] ontrol.asp
http://www.devhood.com/tutorials/t [...] ial_id=752


Message édité par titione le 05-05-2004 à 17:26:49
Reply

Marsh Posté le 05-05-2004 à 17:30:27    

Merci bien :)
Je pense que d'ici demain, je maitriserais deja les placeHolders. J'ai pu voir un apercu des attributs et methodes sous dream MX et sous MVS.NET donc je devrais m'en sortir.
Une question me taraude, peu de webmasters utilisent les placeHolders ?
Dans mon cas, je DOIS respecter la norme w3c, car le site web que je construit doit etre accessible aux mal ou non voyant afin de permettre a leurs logiciels de synthese vocale de lire correctement les pages du site.
Je dois aussi donc veiller a placer certaines balises.
Comme prevu, des que j'ai un truc qui marche, je post ici ;)


---------------
"Un voyage de plusieurs milliers de kilometres commence par un simple pas"
Reply

Marsh Posté le 05-05-2004 à 17:30:27   

Reply

Marsh Posté le 05-05-2004 à 17:34:41    

Ca me semble plus a ca place dans la section ASP, ce topic...
A+,

Reply

Marsh Posté le 05-05-2004 à 19:25:23    

gilou a écrit :

Ca me semble plus a ca place dans la section ASP, ce topic...
A+,


mmm... non.
 
C'est du C# / ASP.NET / HTML...
 
le codebehind est en C#, et c'est bien le sujet du topic. [:spamafote]

Reply

Marsh Posté le 06-05-2004 à 11:39:58    

le placeholder ne laisse trainer aucune balise superflue dans le code html à l'opposé du panel qui laisse toujours un span... pour peu que tu utilises comme un sioux, tes panel ou placeholder ça peut poser des pbs de compréhension par le browser et en plsu rendre le code pas du tout w3c compliant...
même chose avec les Literal et les Label... Label te rajoute des span alors que Literal n'en met pas !!
sur l'utilisation des placeholders, comme c'est transparent, on voit pas :))
c'est vachement pratique pour les chargements dynamiques non déterminées... genre des images, des formulaires etc...

Reply

Marsh Posté le 07-05-2004 à 10:05:12    

totokick > habitué au PHP jme suis posé la meme question il y a quelque temps concernant les pseudos frames
J'ai posé la question sur developpez.com mais j'ai pas eu bcp de réponses  :(  
http://www.developpez.net/forums/v [...] p?t=188294
 
N'hésite pas à poster la meilleure solution que tu auras trouvé ça m'intéresserait bcp  :jap:

Reply

Marsh Posté le 07-05-2004 à 12:19:12    

J'y arrive presque! Mais il me manque encore un moyen de recuperer une variable, je m'explique, voici a quoi ressemble mon template:
http://spdteam.free.fr/img/bidule.JPG
 
Le code de cette page est:

Code :
  1. <%@ Page language="C#" %>
  2. <%@ Register TagPrefix="Copy" TagName="Right" src="copyright.ascx" %>
  3. <%@ Register TagPrefix="WebBook" TagName="Calendar" src="christmas.ascx" %>
  4. <%@ Register TagPrefix="WebBook" TagName="Menu" src="menu.ascx" %>
  5. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
  6. <HTML>
  7. <HEAD>
  8.  <title>Home Page</title>
  9.  <script runat="server">
  10.   void Page_Load(Object sender, EventArgs e)
  11.   {
  12.    /*
  13.    switch ( blabla ) {  
  14.     case "rubrique1" : auMilieu.Controls.Add( LoadControl( "aide.ascx" ) ); break;
  15.     case "rubrique2" : auMilieu.Controls.Add( LoadControl( "jeux.ascx" ) ); break;
  16.     default : auMilieu.Controls.Add( LoadControl( "accueil.ascx" ) ); break;
  17.    }
  18.    */
  19.    auMilieu.Controls.Add(LoadControl("xmlManager.ascx" ));
  20.   }
  21.   void nav(Object sender, EventArgs e)
  22.   {
  23.    lbl.Text = "Coucou";
  24.   }
  25.  </script>
  26. </HEAD>
  27. <body>
  28.  <form runat="server">
  29.   <table border="1" cellpadding="0" cellspacing="1" align="center">
  30.    <tr>
  31.     <td colspan="3" align="center" bgColor="#00ccff"><h3>Bonjour les gens</h3>
  32.     </td>
  33.    </tr>
  34.    <tr>
  35.     <td><WebBook:Menu runat="server" id="Menu" /></td>
  36.     <td><asp:PlaceHolder ID="auMilieu" Runat="server" /></td>
  37.     <td><WebBook:Calendar runat="server" id="Calendrier" /></td>
  38.    </tr>
  39.    <tr>
  40.     <td colspan="3" align="center"><Copy:Right runat="server" id="CopyRight" /></td>
  41.    </tr>
  42.   </table>
  43.   <asp:Label ID="lbl" Runat="server" />
  44.  </form>
  45. </body>
  46. </HTML>


 
Dans le Page_Load(..), j'ai mis un switch(blabla) qui charge le PlaceHolder d'id auMilieu avec le bon UserControl, jusque là tout va bien... (Quoi que y'a t'il un moyen plus propre? C'est mieux le code dans la page ou c'est mieux d'utiliser du codebehind ?)
 
Le UserControle à gauche (menu.ascx) contient un menu avec des liens, mais je ne sais pas comment envoyer une variable blabla depuis ce UserControl à mon template! Comment proceder, pouvez-vous ecrire un bout de code de menu.ascx qui envoi une variable blabla à mon template en fonction du lien qui a ete cliqué?
 
Merci


---------------
"Un voyage de plusieurs milliers de kilometres commence par un simple pas"
Reply

Marsh Posté le 07-05-2004 à 14:12:13    

tu peux faire un truc du genre Page.findControl ou du genre (je suis désolé des approximations mais je ne fais plus de .NET depuis quelques temps et j'ai plus Visual sur mon poste)
 
et du coup une fois que tu récupère le usercontrol tu le caste correctement et tu lui appelles une méthode...
tu vois où je veux en venir ?

Reply

Marsh Posté le 07-05-2004 à 15:32:42    

Tres sincerement, nan  :??: La doc de FindControl ne m'a pas vraiment eclairé non plus.
 
Ce que je cherche a faire c'est charger dynamiquement le contenu du placeHolder auMilieu en fonction du lien qui a ete cliqué dans le UserControl menu.ascx...
 
Comment dois-je ecrire menu.ascx/.cs pour y arriver?


---------------
"Un voyage de plusieurs milliers de kilometres commence par un simple pas"
Reply

Marsh Posté le 07-05-2004 à 15:42:36    

quand tu parles de lien, c vraiment un lien genre a href ou c autre chose... paske si c un lien genre a href il suffit que tu rajoutes tapage.aspx?page=page1&param=valeur
 
et du coup le page = page1 va te permettre de charger le bon contrôle dans le placeholder
dans le contrôle que tu viens de charger tu récupère facilement le param = valeur
là tu as passé ta valeur..
si tu le fais sous forme de form avec button :
dans ta méthode onclick de ton bouton dans menu :
PlaceHolder ph = (PlaceHolder) Page.Parent.FindCOntrol("auMilieu" ); -> ça te renvoie le placeholder que tu castes correctement...
ph.Controls[0] -> ça te renvoie le contrôle utilisateur que tu as loadé dedans (vu qu'il y en a qu'un !!)
et là tu peux appeler une méthode de ton usercontrol...
c plus clair ??  :(


Message édité par titione le 07-05-2004 à 15:43:52
Reply

Marsh Posté le 07-05-2004 à 16:38:30    

Biennn ca :) Je comprend deja mieux, d'ailleurs ca marche...
Tant qu'a faire je souhaiterai avoir une redirection transparente, donc pas d'url du type tapage.aspx?page=page1&param=valeur comme j'avais l'habitude d'utiliser avec php.
Pour palier a cette exigence, j'ai donc utilise un LinkButton: Voici le code de menu.cs, pour l'instant je n'ai qu'un seul lien.
 

Code :
  1. public class menu : UserControl
  2. {
  3. public LinkButton lba;
  4. public PlaceHolder ph;
  5. public void nav(Object sender, EventArgs e)
  6. {
  7.  //Page.Parent.lbl.Text = sender.ToString();
  8.  //Page.Parent.redir("xmlManager.ascx" );
  9.  ph = (PlaceHolder) Page.FindControl("auMilieu" );
  10.  ph.Controls.Add(LoadControl("xmlManager.ascx" ));
  11. }
  12. }


 
Et mon menu.ascx:

Code :
  1. <%@ Control Codebehind="menu.cs" Inherits="menu" %>
  2. <asp:LinkButton id="lba" runat="server" OnClick="nav">xmlManager</asp:LinkButton>


 
Donc ca c'est sympathique mais des que j'aurais plusieurs liens, comment je vais faire, dans la definition de la methode nav, pour recuper quelconque propriete concernant le lien qui a ete clique et de loader le bon UserControl en consequence??
 
Et j'ai une autre question; dans mon template (home.aspx), j'ai un label d'id lbl. Comment je pe acceder a ce label dans la definition de nav (qui je rapelle est une methode du UserControl menu.ascx lui meme appele par home.aspx)??
Car j'ai teste Page.lbl.Text = "Tentative d'affichage"; => Et il me dit C:\Inetpub\wwwroot\recent\menu.cs(11): 'System.Web.UI.Page' does not contain a definition for 'lbl'...
Pourtant il exist bien: home.cs

Code :
  1. public class home : Page
  2. {
  3. public Label lbl;
  4. ...


Message édité par totokick le 07-05-2004 à 16:48:11

---------------
"Un voyage de plusieurs milliers de kilometres commence par un simple pas"
Reply

Marsh Posté le 07-05-2004 à 18:01:38    

Je pense etre clair mais je suis rentré dans les details. Ca serait tres sympa si je pouvais avoir une reponse, j'arrive pas a acceder a mes variables de classe par les methodes d'autres classes...
Je reviens sur le post lundi, j'espere y trouver plusieurs conseils et piste a suivre ;)
 
Merci d'avance


---------------
"Un voyage de plusieurs milliers de kilometres commence par un simple pas"
Reply

Sujets relatifs:

Leave a Replay

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