smoitry
Messages postés69Date d'inscriptionvendredi 27 décembre 2002StatutMembreDernière intervention26 juillet 2007
-
17 avril 2005 à 01:14
smoitry
Messages postés69Date d'inscriptionvendredi 27 décembre 2002StatutMembreDernière intervention26 juillet 2007
-
18 avril 2005 à 23:56
Bonjour !
J'ai un gros soucis, en codant un user control en ASCX et C#.
Je m'explique, pour faire, simple, et déjà tester avant de faire plus compliqué :
Un composant menu.ascx dans lequel j'ai mis un label (ça aurait pu être un litteral, mais là n'est pas le problème). Dans le code behind de ce contrôle, j'ai ceci :
// Placer ici le code utilisateur pour initialiser la page
string html_menu = "";
html_menu = "
";
html_menu += "" + titre + "
";
html_menu += "
";
Label1.Text = html_menu;
}
J'appelle ce contrôle depuis un autre contrôle (mais je pense que même si je l'appelais directement depuis ma page aspx cela reviendrait au même) :
<%@ Control Language="c#" AutoEventWireup="false" Codebehind="page_menu.ascx.cs" Inherits="test.ctrl.page_menu" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
<%@ Register TagPrefix="test" TagName="menu" Src="menu.ascx" %>
<test:menu id="menu1" runat="server" />
// Placer ici le code utilisateur pour initialiser la page
menu1 =
new menu();
menu1.titre = "Test";
menu1.cssid = "club";
}
Et à l'exécution, voici ce qui sort de tout ça :
Autrement dit, soit il ne se souvient pas des propriétés que je lui initialise, soit il génère le contrôle avant que je ne puisse lui passer les propriétés en paramètres.
J'ai fait un essai avec un loadcontrol suivi d'un page.controls.add mais d'une part cela ne fonctionne que directement dans la page aspx (ce qui ne m'arrange pas en l'occurence), et d'autre part le code se retrouve tout à la fin du flux html généré (en gros mon controls.add, je ne sais pas à quel endroit il l'ajoute ce contrôle, moi j'ai besoin de le placer à un endroit précis du flux html).
D'autre part, je ne peux pas initialiser les propriétés du genre :
<%@ Control Language="c#" AutoEventWireup="false" Codebehind="page_menu.ascx.cs" Inherits="aerocase.ctrl.page_menu" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>car je ne connais pas ces propriétés à l'avance, puisqu'à terme ce sera lu soit dans un xml soit dans une base SQL ...
Alors comment faire ? Sûrement que je n'ai pas la bonne démarche, mais justement si quelqu'un pouvait me donner la bonne méthode pour parvenir à mes fins ! Parce que ça fait 3 jours que je fouille un peu partout sur le net sans trouver ... (je précise que j'ai essayé d'utiliser le page_init et le page_prerender à la place du page_load mais rien n'y fait)
Merci par avance à qui voura bien me tirer de ce pétrin !!!
smoitry
Messages postés69Date d'inscriptionvendredi 27 décembre 2002StatutMembreDernière intervention26 juillet 2007 17 avril 2005 à 12:30
Merci Jesusonline !!! C'est exactement ça ! Je n'arrive pas à croire que j'ai pu perdre autant de temps là dessus, mais évidemment il fallait le savoir !
smoitry
Messages postés69Date d'inscriptionvendredi 27 décembre 2002StatutMembreDernière intervention26 juillet 2007 18 avril 2005 à 23:56
Tu as entièrement raison, tout paraît logique. C'est une mauvaise habitude prise dans les applications "Windows Forms" où tous les contrôles sont "private" ... Merci pour ton aide !
J'ai une autre question, mais je crée un autre sujet ça servira sans doute à d'autres aussi !