J'ai rencontré un problème étrange qui n'a aucun sens pour moi. J'essaie de configurer dynamiquement les contrôles de contenu MasterPage sur une page. Je l'ai travaille bien avec le code suivant:L'ajout dynamique de blocs de contenu à Masterpage échoue après Master.FindControl
protected override void OnPreInit(EventArgs e)
{
base.OnPreInit(e);
MasterPageFile = "~/MasterPages/Default.master";
string existantContentPlaceHolderID = "ContentPlaceHolder1";
string nonExistantContentPlaceHolderID = "foo";
//Control c = Master.FindControl(existantContentPlaceHolderID);
//Control c1 = Master.FindControl(nonExistantContentPlaceHolderID);
TextBox t = new TextBox
{
Text = "Text"
};
ITemplate iTemplate = new GenericITemplate(container => container.Controls.Add(t));
AddContentTemplate(existantContentPlaceHolderID, iTemplate);
}
public delegate void InstantiateTemplateDelegate(Control container);
public class GenericITemplate : ITemplate
{
private readonly InstantiateTemplateDelegate m_instantiateTemplate;
public void InstantiateIn(Control container)
{
m_instantiateTemplate(container);
}
public GenericITemplate(InstantiateTemplateDelegate instantiateTemplate)
{
m_instantiateTemplate = instantiateTemplate;
}
}
Cela fonctionne très bien, sauf que je veux être en mesure de bien vérifier que les contentPlaceHolderIDs existent sur le MasterPage avant d'appeler AddContentTemplate que la page renvoie une erreur si vous ajoutez un contrôle de contenu qui pointe vers un ContentPlaceHolder inexistant.
Le problème que j'ai est que dans l'exemple ci-dessus lorsque j'appelle l'une des lignes Master.FindControl commentées, le TextBox ne rend plus.
Est-ce que quelqu'un a des idées pourquoi cela pourrait être ... Je ne peux pas faire la tête ou la queue de ce qui se passe.
Merci, Max
hmm ... c'est intéressant, il ne m'est pas arrivé que l'accès à Master commence à être futzing avec des trucs, mais cela a du sens. J'ai seulement un nombre limité de pages maîtres, donc je vais essayer votre solution, mais jeter le contrôle chargé dans un cache avec une mise en cache mise en retrait dans le fichier maître ... –