c# - 在后面的代码中将 UpdatePanel 转换为 Panel

标签 c# asp.net user-controls updatepanel

在编辑过程中,我使用的 CMS 在我的一些自定义控件和母版页中遇到了 UpdatePanels。我想根据页面是否正在编辑将它们动态转换为 Page_Load 或 Page_Init 或其他内容上的常规面板。

我想将页面上的所有 UpdatePanel 动态转换为面板。找到 UpdatePanels 不是问题,我所有的页面都继承自一个公共(public)基类,我所有的控件都继承自一个公共(public)基类——因此我可以覆盖 Page_Init 或其他任何东西。

我怀疑我无法将 UpdatePanel 转换为常规面板。我想过也许找到 UpdatePanel,向 UpdatePanel 的父级添加一个面板,然后遍历每个 UpdatePanel 的控件并将它们添加到新面板,然后删除 UpdatePanel。

但是如果我添加一个新的面板,它会在最后,你能在中间添加一个面板吗……也许用插入?这应该不难,但我是不是太难了?有更简单的方法吗?有人做过这样的事情吗?

谢谢, 埃里克

更新 我最终覆盖了我的 MasterPage 基类上的 OnInit 函数,以便在根据 Philippe 的评论移动后将 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 });
}

最佳答案

我很确定没有办法将 UpdatePanel 转换为 Panel - 至少没有简单的方法。当您将 UpdatePanel 添加到您的页面时,.Net 将添加一个带有大量 javascript 的脚本引用以使 UpdatePanel 工作。这可能是您的 CMS 遇到的问题。这些包通常会与某些 .Net Ajax javascript 函数(如 $get 或类似函数)发生名称冲突。

如果您坚持有时使用 UpdatePanel 有时不使用的模型,唯一的解决方案是在页面上放置一个面板,并在每次您想要使用它时在代码后面动态构建 UpdatePanel。

我倾向于同意 Raul 的观点,您或许应该尝试找出另一个原因。如果您的 CMS 不喜欢它们,请尝试使用除 UpdatePanels 之外的其他一些 ajax 方法(PageMethods、jQuery .ajax 调用或老式的 javascript XMLHttprequest)。

关于c# - 在后面的代码中将 UpdatePanel 转换为 Panel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4011443/

相关文章:

html - 从水平 View 移动到垂直 View 时,iPhone 菜单图标重复

.net - 使用 aspx 渲染引擎生成非 HTML

c# - 为什么在 DataTable 上调用 AsEnumerable() 会阻止 GridView 绑定(bind)到它?

c# - 如何创建一个可以在其中放置其他控件的 UserControl?

c# - 如何建模 Document 类?

c# - 只执行程序的一部分

c# - 如何检查Dictionary是否已具有键“x”?

c# - 如何通过 C# 类中的值获取变量名称

asp.net - 将自定义参数发送到用户控件 ascx

WPF:使整个边框可点击