Communication entre UserControl en ASP.NET [Résolu]

Alex009 25 Messages postés jeudi 20 mai 2004Date d'inscription 10 février 2007 Dernière intervention - 29 oct. 2004 à 04:28 - Dernière réponse : SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 29 oct. 2004 à 07:51
3
Merci
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

Merci SharpMao 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de SharpMao
Alex009 25 Messages postés jeudi 20 mai 2004Date d'inscription 10 février 2007 Dernière intervention - 29 oct. 2004 à 18:23
0
Merci
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
Commenter la réponse de Alex009
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 30 oct. 2004 à 17:22
0
Merci
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
Commenter la réponse de SharpMao

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.