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