2009-04-26 5 views
0

J'ai créé un contrôle Web et certaines données sont nécessaires à partir de sa page parente.
Comment peut-il accéder à ces données?Accès aux données sur la page à partir de Web Control

Mise à jour: Merci pour les solutions rapides, mais elles ne fonctionnent pas pour moi. Visual Studio ne reconnaît pas le nom de la page en tant que classe. Je pris le nom de l'endroit où la classe est defind:

public partial class Apps_Site_Templates_CollegesMain : cUICommonFeatures 

(cUICommonFeatures hérite de System.Web.UI.Page)

Mais dans le contrôle, quand je définis

 protected System.Web.UI.Page parentPage; 
     parentPage = (Apps_Site_Templates_CollegesMain)Page; 

I obtenir une erreur de conformité:

Le type ou le nom d'espace de noms 'Apps_Site_Templates_CollegesMain' est introuvable (une directive using ou une référence d'assembly est-elle manquante?)

Je me sens comme si je manque quelque chose ici vraiment basique, et je serai probablement très gêné quand je reçois une réponse, mais je besoin d'aide ....

Répondre

1

Les contrôles doivent être écrits pour être indépendants de la page sur laquelle ils se trouvent. Si le contrôle a besoin d'un élément de données, il doit alors exposer une propriété publique qui est du type des données dont il a besoin. La page sur laquelle il est placé définit alors cette propriété sur les données dont le contrôle a besoin. Cela permet au contrôle d'être utilisé sur une autre page, ou même fait partie d'un UserControl et que UserControl ensuite utilisé sur la page parente.

2

Si la classe de page parent est nommé permet de dire ParentPage, vous pouvez le faire dans le contrôle:

ParentPage page = (ParentPage)this.Page; 

Ensuite, vous pouvez accéder aux propriétés et méthodes sur ParentPage. Si vous avez plusieurs pages utilisant le même contrôle, vous devez utiliser une interface sur la page parent pour accéder aux propriétés de la page.

IParentPage page = (IParentPage)this.Page; 

Est-ce que cela répond à votre question?

+0

Mon problème est que Visual Studio ne reconnaît pas le nom de la page parente en tant que classe ... J'ai mis à jour ma question –

+0

+1 - les interfaces sont définitivement le chemin à parcourir. –

+0

@Lea Cohen: Avez-vous le "using namespace.where.page.class.reside" en haut de votre fichier usercontrol? Si vous le faites, quels espaces de noms sont la page et le contrôle userc in, respectivement? – asgerhallas

1

Il y a plusieurs façons de le faire. Je pense que le meilleur est d'ajouter une propriété pour les besoins de contrôle de données et dans votre page définir cette propriété.

Aussi, vous pouvez accéder à votre page de votre contrôle comme ça:

string dataYouWant = ((YourParentPageName)Page).GetData(); 

Ou vous pouvez ajouter les données à viewstate, et le lire à partir des commandes de l'enfant.

Mais comme je l'ai dit, je choisirais le premier.

1

Tous les contrôles (contrôles serveur, contrôles utilisateur et contrôles personnalisés) exposent une propriété Page qui vous permet d'accéder à l'instance de page contenant à partir du code du contrôle.

Par conséquent, vous pouvez simplement faire:

// In Usercontrol code: 
MyParentPage parentPage = this.Page as MyParentPage; 
if (parentPage != null) 
{ 
    // Access the properties of the Parent page. 
    string t = parentPage.Title; 
} 

L'article "Mastering Page-UserControl Communication" offre une bonne introduction de débutants pour contrôler les interactions-page.

Questions connexes