2009-11-29 4 views
0

J'ai un problème avec le chargement dynamique des contrôles dans ContentPlaceHolder de la page maître.Ajout dynamique d'un contrôle à la page maître

Nom du ContentPlaceHolder et le chemin du UserControl est chargé de db et envoyer à ce petit code:

Control c = this.Page.LoadControl(uc-path-from-db);
this.Page.Master.FindControl(cph-name-from-db).Controls.Add(c);

Quand je cours, je reçois cette erreur:

The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).

Qu'est-ce que Je fais mal?

+0

Avez-vous des blocs de code (<% %>) dans l'élément de la page principale? – Phaedrus

+0

Aucun balisage. Quand j'ai recherché sur Google pour ce problème, et j'ai couru aux messages qui disent de chercher les blocs de code dans l'élément principal, mais je n'en ai pas. – lopkiju

Répondre

0

Ce n'est pas tout à fait clair sans votre balisage, mais il vous indique que vous ne pouvez pas ajouter le contrôle car une partie de votre balisage contient un bloc <% ...%> qui indique à ASP.NET d'exécuter tout est là pour créer votre balisage. Essayez de supprimer votre bloc <% ...%> et il devrait vous laisser ajouter le contrôle. Ou postez votre balisage pour une réponse plus complète.

+0

Fait intéressant, je n'ai aucun balisage. Je viens d'ajouter le contrôle, compilé le projet, exécuter le projet, UserControl attendu pour être ajouté sans aucune donnée et a obtenu cette erreur. Je suis totalement intrigué par le message d'erreur. – lopkiju

+0

Il n'y a donc pas de blocs de code dans votre page maître, page ou contrôle utilisateur? –

+0

Je ne sais pas comment répondre. J'ai vu un bloc de code dans une page, mais cela ne semble pas interférer avec le chargement des commandes parce que le chargement fonctionne avec ce bloc de code et je ne suis pas sûr de ce que j'ai fait. Merci. – lopkiju

0

En fonction du type de projet Web sur lequel vous travaillez, vous devez vous assurer de <% @ Register%> votre UserControl à la fois sur la MasterPage à laquelle vous le chargez et sur la page que vous chargez de. Si vous travaillez avec un site Web et non une application Web il compile chaque page dans son petit assemblage et ne référencera pas l'assembly usercontrol à moins qu'il ne voit cette balise Reference dans le balisage.

Je ne suis pas à 100% à ce sujet, mais ça vaut le coup d'oeil.

+0

J'utilise une application web et j'appelle ce code de BaseClass. J'ai essayé de l'appeler à partir de page_load de la page par défaut et il charge, mais sans aucune donnée même si je mets du texte à l'intérieur du contrôle. – lopkiju

Questions connexes