我正在尝试逐步转换依赖于更新面板和ASP.NET控件的站点以使用客户端范例。作为该过程的一个步骤,我尝试重新创建基于更新面板的模式并将其转换为客户端模式。
为了做到这一点,我在页面加载时将这个模态的内容(一个带有一些子控件的更新面板)放在一个隐藏的div中,当打开模态时,我.detach()
更新从隐藏的div和.append
面板到新的基于客户端的模式的内容div。
但是,在更新面板分离并附加(但不是之前)之后,由其子控件触发的部分回发不再导致ASP.NET返回更新的HTML。相反,似乎正在返回更新面板的原始HTML。
我的问题是,只要所有DOM事件仍然附加,更新面板div位于页面上会有什么不同?为什么更新面板部分回发无法导致更新的HTML被返回,因为更新面板已从文档中的初始位置移开?
更新
在做了一些额外的调试之后,我发现当更新面板处于其原始位置时,模态对话框控件的CreateChildControls()
方法在特定的代码隐藏点击处理程序之前触发负责更新更新面板。但是,在移动更新面板后,单击处理程序将在CreateChildControls()
方法之前触发。触发CreateChildControls()
方法后,模态对话框控件的内容子控件被设置为不可见,这导致该模态的内容未被更新。
这引发了另外两个问题。在第二个方案中调用CreateChildControls()
时,内容容器控件设置为Visible,但在调用自定义控件的.Add()
属性的Controls
方法后,内容容器控件设置为无形。为什么会这样?
第二个问题是,为什么更改DOM中更新面板的位置会改变后面代码中的执行顺序,以便点击处理程序在CreateChildControls()
方法之前触发?