ASP.NET AJAX嵌套的updatePanel modalPopup问题

3

在某些情况下,如果您的嵌套模态对话框被包裹在 updatePanels 中(并不理想,但可能需要重新设计,因为一些我们想要重用的用户控件是这样编写的),当您发起应该打开嵌套模态对话框的后台请求时,它会关闭父级对话框。为了举个例子,如果我设置断点并运行...

((ModalPopupExtender)this.Parent.Parent.FindControl("modalPopupExtender'sID").Show();

在调用子 modalPopup 的 Show() 方法之前,它的工作方式与我们最初的预期相同。我认为,由于当 updatePanel 嵌套时,它们可以向其父级提交,因此父级 modalPopup "不知道" 它应该显示并且从头开始重新加载其面板的可见性为 false。由于子 modalPopup 然后嵌套在一个可见性为 false 的父面板内,因此在其上调用 Show() 没有任何效果。因此,获取另一个 modalPopup 的打开,当前的 modalPopup 将关闭。这不是错误,只是我们没有预料到的行为,因此很难跟踪,没有任何异常抛出,但我认为上述解释是有道理的...如果我理解问题不正确,请澄清并启发我,因为这似乎并不是所有时候都会发生!
对于这种特定情况,我们现在陷入困境,需要重新编写一些控件,以避免嵌套 updatePanel 导致此类问题,但我很好奇:
有人以前遇到过这个问题吗?你是否想出了任何聪明的解决方法,而不涉及调用 FindControl() 来重新显示相关的 modalPopup?

我使用 UpdatePanels 的次数越多,就越讨厌它们。我建议你学习 jQuery 或其他 JavaScript 库,并完全避免使用 UpdatePanels。 - ctrlShiftBryan
是的,现在jQuery将与增强的智能感知一起随VS一起发布,我认为这将变得更加普遍! UpdatePanel在理论上很不错,因为你不需要考虑它们,只需将其放入标记中...但如果它们无法在每种情况下运行,那就有些麻烦了。 - Grank
我不确定我理解你所说的updatePanel/modal层次结构。是这样,你有一个包含update panel的模态框,并且update panel中有一个模态框吗? - sledgebox
我目前没有它,因为一些更改已经被检查过了,但我认为它是这样的: <updatePanel> <modalPopup> <updatePanel> <modalPopup> </modalPopup> </updatePanel> </modalPopup> </updatePanel> 甚至可能有第三个 updatePanel 包装它所有的内容 :P - Grank
把以下关于编程的内容从英语翻译成中文。请仅返回翻译后的文本:(哦,对不起,那真是太难读了,换行和空格被忽略了……我应该想到这一点) - Grank
1个回答

4

我已经解决了这个问题!
如果你将UpdatePanel的UpdateMode更改为“Conditional”,那么当子UpdatePanel回传时,父UpdatePanel不会回传,然后嵌套它们就没有任何问题了!
我不确定为什么UpdateMode =“Always”是默认值,但是我们从中吸取了教训。


我们学会了始终将UpdatePanel的UpdateModes设置为Conditional...说实话,我并不完全确定是否可以想到一个场景,我们希望将它们设置为Always。 - Richard Ev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接