Communication entre UserControl en ASP.NET

Résolu
Alex009 Messages postés 25 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 10 février 2007 - 29 oct. 2004 à 04:28
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 - 30 oct. 2004 à 17:22
Bonjour

j'ai une page xyz.aspx qui contient deux UserControl qui sont Header.ascx et Menu.ascx. J'aimerai au click d'un boutton du Header.ascx faire appel à une methode de Menu.ascx qui mettre à jour un textbox de Menu.ascx. Mais je n arrive pas.

Au niveau de la page xyz.aspx j'ai:
<HEADER:MYHEADER id="MyHeader" runat="server"></HEADER:MYHEADER>

<menu:mymenu id="MyMenu" runat="server"></menu:mymenu></TD>

Dans le click de mon boutton au niveau du header j'ai écris ceci:
(C#)
Menu myControl = (Menu)FindControl("myMenu");
Type myControlType = myControl.GetType();
MethodeInfo myMethodeInfo = myControlType.GetMethod("display");

myMethodeInfo.Invoke(myControl ,null);

Quand je le teste, la première ligne me retourne null.

Pour resumer j'aimerai savoir comment initialiser un textbox d'un UserControl à partir du click d'un boutton d'un autre UserControl.

Je vous remercie.

3 réponses

SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
29 oct. 2004 à 07:51
Hello,
Je vois trois solutions à ton problème.
- La première avec le FindControl :
//Tu peux aussi essayer avec Parent au lieu de Page.
Menu myControl = (Menu)Page.FindControl("MyMenu");
myControl.display();


La deuxième en déclarant dans le code de ta page un membre public de type Menu:
//J'admet que le nom de la classe de la page est MyPage
public class MyPage: System.Web.UI.Page{
public Menu MyMenu;
//...Le rest de la page

// Et dans le click du bouton
Menu myControl = ((MyPage)Page).MyMenu;
myControl.display();


La troisième en déclarant dans le code de ton Header un membre public de type Menu.
//Dans le PageLoad de la page
MyHeader.MyMenu = MyMenu;

//Dans ton Header
public class Header: System.Web.UI.UserControl{
//Tu peux le mettre private et faire un accesseur 
public Menu MyMenu;

// Et dans le click du bouton
MyMenu.display();

Amicalement, SharpMao
3
Alex009 Messages postés 25 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 10 février 2007
29 oct. 2004 à 18:23
Salut SharpMao

Merci pour tes réponse, ça marche avec le premeir exemple, mais je n'arrive pas à la faire fonctionner avec les autresJuste pare curiosité j'aimerai savoir comment les faires fonctionner. J'ai utilisé le deuxième expemple, dont voici une partie du code:

public class Header : System.Web.UI.UserControl
{
protected System.Web.UI.WebControls.ImageButton imageButton1;

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

//nothing
}

private void imageButton1_Click(object sender,
System.Web.UI.ImageClickEventArgs e)
{
/*Erreur a ce niveau à la compilation: myPage does not contains a definiton for Menu*/
Menu myControl = ((myPage)Page).MyMenu;
myControl.display();

}

}
}

public class myPage : System.Web.UI.Page
{

public Menu myMenu; //= new Menu();
protected void Page_Load(object sender, System.EventArgs e)
{
if (!IsPostBack)
{
// To do }

}

}

********************************************
Concernat ton troisième exemple tu dis:
//Dans le PageLoad de la page
MyHeader.MyMenu = MyMenu;

tu fais reference au PageLoad de myPage ou du Header?

Merci bien
0
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
30 oct. 2004 à 17:22
Hello,
pour le deuxième exemple, tu as mis myMenu avec une minuscule et tu l'appel avec une Majuscule.
Pour le troisième, il s'agit du PageLoad de la page.
Amicalement, SharpMao
0
Rejoignez-nous