CMS, которую я использую, борется с UpdatePanels в некоторых моих пользовательских элементах управления и главных страницах во время редактирования.Я хотел бы динамически преобразовать их в обычные панели на Page_Load или Page_Init или что-то в зависимости от того, редактируется ли страница.
Я бы хотел динамически преобразовать все панели обновления на странице в Панели.Поиск UpdatePanels не проблема, все мои страницы наследуются от общего базового класса, а все мои элементы управления наследуются от общего базового класса - так что я могу переопределить Page_Init или любой другой.
Я подозреваю, что могускрыть панель обновления в обычную панель.Я подумал о том, чтобы найти UpdatePanel, добавить Panel к родительскому элементу UpdatePanel, затем просмотреть все элементы управления UpdatePanel и добавить их в новую Panel, а затем удалить UpdatePanel.
Но если я добавлю новую Panel, это будет в конце, вы можете добавить панель в середине ... может быть, с помощью вставки?Это не должно быть сложно, но я делаю это слишком сложно?Есть ли более простой способ?Кто-нибудь когда-нибудь делал подобные вещи?
Спасибо, Эрик
Обновление В итоге я переопределил функцию OnInit в своем базовом классе MasterPage, чтобы после этого считывать UpdatePanel в ScriptManager.перенесено за комментарий Филиппа на 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 });
}