Donner des propriétés à un ASCX ?

Résolu
smoitry Messages postés 69 Date d'inscription vendredi 27 décembre 2002 Statut Membre Dernière intervention 26 juillet 2007 - 17 avril 2005 à 01:14
smoitry Messages postés 69 Date d'inscription vendredi 27 décembre 2002 Statut Membre Dernière intervention 26 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 :


protected
string _cssid = "";

protected
string _titre = "";

protected System.Web.UI.WebControls.Label Label1;



public
string cssid
{

get {
return(_cssid); }

set { _cssid =
value; }
}



public
string titre
{

get {
return(_titre); }

set { _titre =
value; }
}



private
void Page_Load(
object sender, System.EventArgs e)
{

// 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" />

Puis dans le code behind de ceci :



private test.ctrl.menu menu1;

private
void Page_Load(
object sender, System.EventArgs e)
{

// 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 :

<test:menu id="menu1" runat="server" titre="Test" />

<%@ 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 !!!

Stéphane
<%@ Register TagPrefix="aerocase" TagName="menu_section" Src="menu_section.ascx" %>

4 réponses

jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
17 avril 2005 à 02:49
Normal, supprime le new et met un protected



protected test.ctrl.menu menu1;

private
void Page_Load(
object sender, System.EventArgs e)
{

// Placer ici le code utilisateur pour initialiser la page

menu1.titre = "Test";
menu1.cssid = "club";

}


Ca devrait marcher.

<hr>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
3
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
17 avril 2005 à 15:19
C'est la meme chose que pour un bouton. Quand tu met un bouton dans le
code aspx, tu ne fais pas de new pour lui mettre des choses dedans.



Il y a tres peu de différence entre un Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
3
smoitry Messages postés 69 Date d'inscription vendredi 27 décembre 2002 Statut Membre Dernière intervention 26 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 !

Encore mille mercis !

A+

Stéphane
0
smoitry Messages postés 69 Date d'inscription vendredi 27 décembre 2002 Statut Membre Dernière intervention 26 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 !

Encore merci !
A+

Stéphane
0
Rejoignez-nous