Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将UpdatePanel转换为代码隐藏中的面板_C#_Asp.net_User Controls_Updatepanel - Fatal编程技术网

C# 将UpdatePanel转换为代码隐藏中的面板

C# 将UpdatePanel转换为代码隐藏中的面板,c#,asp.net,user-controls,updatepanel,C#,Asp.net,User Controls,Updatepanel,在编辑过程中,我使用的CMS与一些自定义控件和母版页中的UpdatePanel发生了冲突。我想根据页面是否正在编辑,动态地将它们转换为Page_Load或Page_Init上的常规面板 我想将页面上的所有UpdatePanel动态转换为面板。查找UpdatePanels不是问题,我的所有页面都继承自一个公共基类,我的所有控件都继承自一个公共基类——因此我可以重写页面初始化或其他任何内容 我怀疑我无法将UpdatePanel转换为常规面板。我想找到UpdatePanel,在UpdatePanel的

在编辑过程中,我使用的CMS与一些自定义控件和母版页中的UpdatePanel发生了冲突。我想根据页面是否正在编辑,动态地将它们转换为Page_Load或Page_Init上的常规面板

我想将页面上的所有UpdatePanel动态转换为面板。查找UpdatePanels不是问题,我的所有页面都继承自一个公共基类,我的所有控件都继承自一个公共基类——因此我可以重写页面初始化或其他任何内容

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

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

谢谢, 埃里克

更新 根据Philippe的评论,我最终重写了MasterPage基类上的OnInit函数,将UpdatePanel读取到ScriptManager


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

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


我倾向于同意劳尔的观点,你可能应该试着找出另一个原因。如果您的CMS不喜欢,请尝试使用其他一些ajax方法,而不是UpdatePanels PageMethods、jQuery.ajax调用或老式的javascript XMLHttprequest。

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

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


我倾向于同意劳尔的观点,你可能应该试着找出另一个原因。如果您的CMS不喜欢,请尝试使用一些其他ajax方法,而不是UpdatePanels PageMethods、jQuery.ajax调用或老式的javascript XMLHttprequest。

我希望将来消除UpdatePanels,至少在流量很大的页面上。但它们太方便了……我希望将来能消除UpdatePanel,至少在流量很大的页面上是这样。但是它们很方便…我的2美分。。。试着找出问题的根本原因。UpdatePanel一开始不应该给您带来问题。您能否澄清更新面板中出现的错误类型?无法注销ID为“up”的UpdatePanel,因为它未向ScriptManager注册。如果从控件树中删除UpdatePanel,然后再次添加,则可能会发生这种情况,这是不受支持的。参数名称:updatepanel如何添加此updatepanel。你能随意重现这个错误吗?还是它是随机发生的。如果你可以重新编程,你应该添加跟踪语句并尝试调试你的应用程序。我使用的是一个封闭源代码的第三方内容管理系统,它在加载或初始化期间移动控件。我只是希望在你离开公司后,我永远不会成为一个必须使用此代码的人。我的2美分。。。试着找出问题的根本原因。UpdatePanel一开始不应该给您带来问题。您能否澄清更新面板中出现的错误类型?无法注销ID为“up”的UpdatePanel,因为它未向ScriptManager注册。如果从控件树中删除UpdatePanel,然后再次添加,则可能会发生这种情况,这是不受支持的。参数名称:updatepanel如何添加此updatepanel。你能随意重现这个错误吗?还是它是随机发生的。如果你可以重新编程,你应该添加跟踪语句,并尝试调试你的应用程序。我使用的是一个封闭源代码的第三方内容管理系统,它在加载或初始化期间移动控件。我只是希望我永远不会成为继你之后必须使用此代码的人 离开公司。
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 });
}