Donner des propriétés à un ASCX ?

[Résolu]
Signaler
Messages postés
69
Date d'inscription
vendredi 27 décembre 2002
Statut
Membre
Dernière intervention
26 juillet 2007
-
Messages postés
69
Date d'inscription
vendredi 27 décembre 2002
Statut
Membre
Dernière intervention
26 juillet 2007
-
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

Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
29
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
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
29
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
Messages postés
69
Date d'inscription
vendredi 27 décembre 2002
Statut
Membre
Dernière intervention
26 juillet 2007

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

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