J'ai un projet de site Web, et à l'intérieur de celui-ci, j'ai un utilisateur Web Control défini dans un fichier ASCX.Contrôle Web ajouté au type de contrôle .master introuvable dans la page enfant
Le contrôle est ajouté à Site.Master et il s'affiche correctement sur la page et tout va bien.
Je dois remplacer certains des champs du contrôle sur l'une des pages qui dérivent de Site.Master.
// In OnLoad:
MyControlName control = (MyControlName) Page.Master.GetBaseMasterPage().FindControl("controlID"));
Le problème est que MyControlName ne s'inscrit pas en tant que type valide sur la page enfant. Si j'ajoute directement une deuxième instance du contrôle à la page enfant, la procédure ci-dessus fonctionne, mais si le contrôle n'est pas placé directement sur la page et qu'il n'est défini que dans la page maître, le type n'est pas défini. Le contrôle n'est pas dans un espace de noms, et est défini dans le projet, donc je ne sais pas pourquoi il a un tel emplacement de problème le type approprié.
Si je mets un point d'arrêt dans le OnLoad, le type indiqué pour le contrôle est ASP.my_control_name_ascx, mais cela ne fonctionne pas non plus.
Pourquoi la classe enfant ne peut-elle pas référencer le type correct? Puis-je résoudre ce problème?
Merci!
Oui, il est notre propre fonction. Nous avons un maître de site et des maîtres de section. Tous les maıtres de section n'héritent pas forcément du maître du site, de sorte que la fonction ne fait que passer à la page maître la plus haute. Ce code fonctionne correctement si une deuxième instance du contrôle est placée sur la page. c'est-à-dire qu'il localise le contrôle sur le maître et met à jour l'état du contrôle de la page maître, mais seulement si la page enfant a une instance du contrôle sur celle-ci. Sinon, le compilateur dit qu'il s'agit d'un type inconnu. Donc, c'est juste un problème de résolution de type, pas un problème de fonctionnalité. – turtle
Point rapide (pédant) sur cet échantillon de code; vous auriez besoin de mettre Page.Master entre parenthèses pour obtenir le type: MyControlName control = ((MyControlName) Page.Master) .FindControl ("controlId"); –
Je ne vois pas pourquoi, Page.Master est une propriété de type MasterPage, qui hérite de Control, qui a la méthode FindControl. Vous avez seulement besoin de convertir le résultat, qui est le résultat de la méthode FindControl, vous n'avez pas besoin d'accrocher plus loin. –