Parent.FindControl()无法正常工作?
时间:2020-03-06 14:37:35 来源:igfitidea点击:
我有一个包含iframe的页面
我想从iframe的其中一个页面中回顾一下,并使默认页面上的面板不可见,因为它遮盖了弹出窗口
我尝试使用Parent.FindControl,但似乎无法正常工作。我肯定我在findcontrol中具有正确的ID,因为我使用Firebug检查了面板,然后从那里复制了ID
有人知道我在想什么吗?
解决方案
首先,FindControl不是Javascript中的函数。
我没有完全解决问题,但是我会尽力而为。
听起来我们有一个ASP.NET页,其中有一个iframe引用了另一个ASP.NET页,并且在iframe要求的那个页面中,我们想要修改该页面中包含的项目的可见性包含iframe。
如果我对问题的理解是正确的,那么我们这里就有一些令人讨厌的问题。
- 在浏览器级别实际发生的是加载了第一页,并且该页中包含一个iframe,该iframe向服务器发出了第二个请求。
- 第二个请求无法找到控件,因为它不在同一个页面中,并且在该请求期间还没有运行。
因此,这里有一些替代方法:
- 摆脱iframe并使用面板。这将使它们都处于相同的请求中,并且能够相互查找。
- (另外)执行此操作时,我们将要使用Page.FindControl()而不是Parent.FindControl(),因为FindControl方法仅搜索控件的子控件集合,我想控件将位于页面上的其他位置。
- 在iframe的客户端,我们可以使用一些javascript代码来访问外页的DOM,并在其中设置可见性。
上层文件:
<body> <input type="text" id="accessme" value="Not Accessed" /> ... </body>
iframe中的文档:
<head> ... <script type="text/javascript"> function setValueOfAccessme() { window.parent.document.getElementById("accessme").value = "Accessed"; } </script> </head> <body onload="setValueOfAccessme();"> </body>
iframe中的文档会在加载时访问"窗口对象"上的"文档对象",并使用" getElementId()"函数来设置父文档正文中输入的值。
另外,这里还有一个更有用的查找控制例程...
Public Shared Function MoreHelpfulFindControl(ByVal parent As UI.Control, ByVal id As String) As UI.Control If parent.ID = id Then Return parent For Each child As UI.Control In parent.Controls Dim recurse As UI.Control = MoreHelpfulFindControl(child, id) If recurse IsNot Nothing Then Return recurse Next Return Nothing End Function