2009-09-21 6 views

Répondre

1

En supposant que votre méthode est public et le type de votre contrôle utilisateur est YourUserControlsType , essayez ceci:

YourUserControlsType ctrlAtMasterPage = 
     (YourUserControlsType)Page.Master.FindControl("YouControlsID"); 
ctrlAtMasterPage.YourPublicMethod(); 
0

Cela devrait vous obtenir votre contrôle, même si elle a été ajouté programatically:

Dans un membre de la page que vous avez ajouté:

TextBox FoundTextBox = (TextBox)this.Master.FindControl("RunAtServerTextBoxServerID"); 
0

Si vous ne disposez pas d'une référence de membre au contrôle, vous devriez envisager de découplage la page du contrôle. Dans un monde idéal, la page ne doit pas nécessairement savoir sur un contrôle peut contenir ou non. Par conséquent, vous pouvez vous intéresser à une implémentation du modèle MVP.

Il existe une implémentation simple de MVP here, et vous pouvez voir le découplage dans l'action here. Si vous inversez la communication à partir de l'exemple de découplage (c'est-à-dire que la page déclenche un événement que le contrôle détecte), vous avez essentiellement découplé votre page du contrôle. Cela a un avantage en ce sens que si votre page change et que le contrôle n'est plus utilisé, l'événement n'est repris par rien et votre page continue à s'exécuter sans problème. Je trouve cela beaucoup plus approprié qu'une exception de référence nulle potentielle lorsque FindControl ne trouve pas le contrôle, puis vous essayez d'exécuter une méthode dessus.

Bien que le découplage puisse prendre quelques minutes de plus, dans de nombreux cas, il s'avère utile.

Questions connexes