Le CMS que j'utilise est confronté à UpdatePanels dans certains de mes contrôles et pages maîtres personnalisés lors des modifications. Je voudrais les convertir dynamiquement en panneaux réguliers sur Page_Load ou Page_Init ou quelque chose basé sur si la page est en cours d'édition.Convertir UpdatePanel en Panel derrière le code
Je voudrais convertir tous les UpdatePanels d'une page en panneaux dynamiquement. Trouver les UpdatePanels n'est pas un problème, toutes mes pages héritent d'une classe de base commune, et tous mes contrôles héritent d'une classe de base commune - donc je peux remplacer le Page_Init ou autre.
Je suspecte que je ne peux pas convertir le UpdatePanel à un panneau normal. J'ai pensé à peut-être trouver le UpdatePanel, ajouter un Panel au parent de UpdatePanel, puis boucler à travers chacun des contrôles de UpdatePanel et les ajouter au nouveau Panel, puis supprimer le UpdatePanel.
Mais si j'ajoute un nouveau Panel, ce sera à la fin, pouvez-vous ajouter un Panel au milieu ... peut-être avec Insert? Cela ne devrait pas être difficile, mais est-ce que je le rends trop difficile? Y a-t-il un moyen plus simple? Quelqu'un a déjà fait des trucs comme ça?
Merci, Eric
Mise à jour J'ai fini remplacer la fonction OnInit sur ma classe de base MasterPage pour readd l'UpdatePanel au ScriptManager après déplacé par le commentaire de Philippe sur http://msmvps.com/blogs/luisabreu/archive/2006/11/16/adding-removing-updatepanels-dynamicaly-from-a-page.aspx
protected override void OnInit(EventArgs e)
{
if (Page is CMSPage && Page.IsDesignMode())
{
foreach (UpdatePanel up in this.FindControls<UpdatePanel>())
{
up.Load += UpdatePanel_Load;
}
}
base.OnInit(e);
}
private void UpdatePanel_Load(object sender, EventArgs e)
{
UpdatePanel panel = sender as UpdatePanel;
MethodInfo m = (from methods in typeof(ScriptManager).GetMethods(BindingFlags.NonPublic | BindingFlags.Instance)
where methods.Name.Equals("System.Web.UI.IScriptManagerInternal.RegisterUpdatePanel")
select methods).First();
if (panel == null || m == null)
return;
m.Invoke(ScriptManager.GetCurrent(Page), new object[] { panel });
}
J'espère juste que je ne serai jamais celui qui doit travailler avec ce code après avoir quitté l'entreprise. – Peter
Mes 2 cents ... Essayez de comprendre la cause profonde du problème. UpdatePanels ne devrait pas vous causer de problèmes en premier lieu. Pouvez-vous clarifier le type d'erreurs que vous obtenez avec les panneaux de mise à jour? –
Impossible de désenregistrer UpdatePanel avec l'ID 'up' car il n'a pas été enregistré avec ScriptManager. Cela peut se produire si le UpdatePanel a été supprimé de l'arborescence de contrôle et ajouté ultérieurement, ce qui n'est pas pris en charge. Nom du paramètre: updatePanel – Eric