1

涉及的所有控件都在同一个更新面板中。

在初始页面加载时,我正在移动 DOM 中的控件,如下所示:

DIV_Child.Parent.Controls.Remove(DIV_Child) 'Remove from original parent'
DIV_NewParent.Controls.Add(DIV_Child)

在初始页面加载时,我还通过添加样式来操作这些控件。

DIV_Child.Style("position") = "absolute"
DIV_Child.style("background-color") = "black"
'etc.

当发生部分回发时,DIV_Child 会回到其原始状态:未移动且未设置样式。

  • 只有在 DOM 中移动的那些控件才会出现此问题。如果我删除那些移动控件的行,控件会在部分回发之间保持样式和 DOM 定位。

如何防止移动控件在部分回发时丢失其样式和 DOM 中的新位置?

4

1 回答 1

2

您需要使用ContentTemplateContainer属性以编程方式添加或删除 UpdatePanel 中的控件ContentTemplate

在您的方案中,您应该将包含 DIV(DIV_Child 的父级和 DIV_NewParent)以及 DIV_Child 添加到 PageLoad 中的 ContentTemplateContainer 的 Controls 集合中:-

    upd.ContentTemplateContainer.Controls.Add(DIV_OldParent);
    upd.ContentTemplateContainer.Controls.Add(DIV_NewParent);

    upd.ContentTemplateContainer.Controls.Add(DIV_Child);

出现问题是因为您的标记在其原始位置和样式中包含 div,并且由于它与在部分回发中提交的内容不同,因此 UpdatePanel 将其作为更改返回(简化解释)。

请试一试。

我通常会推荐使用 UpdatePanel 来实现快速而肮脏的东西,但为了获得更好的性能,请改用 jQuery Ajax 和服务器端 HttpHandler。虽然这是(一点)工作,但它确实为您提供了更好的灵活性,并且您可以保证没有任何东西会干扰不在 UpdatePanel 内的 DOM 部分。

我同意使用 UpdatePanels 是一种更快的开发体验,但它们有许多问题,尤其是它们在每次部分回发时来回发布 ViewState,这不是很有效。

于 2013-12-10T02:29:05.233 回答