1

我有一个包含 iframe 的页面

从 iframe 中的一个页面中,我想回顾一下并使默认页面上的面板不可见,因为它掩盖了弹出窗口

我尝试使用 Parent.FindControl 但它似乎不起作用。我很肯定我在 findcontrol 中有正确的 ID,因为我使用 Firebug 检查面板并从那里复制了 ID

有谁知道我错过了什么?

4

4 回答 4

3

我没有完全理解你的问题,但我会尽力而为。

听起来您有一个 ASP.NET 页面,其中有一个 iframe 引用另一个 ASP.NET 页面,并且在 iframe 请求的那个页面中,您想要修改页面中包含的项目的可见性包含 iframe。

如果我对您的问题的理解是正确的,那么您在这里遇到了一些令人讨厌的问题。

  1. 在浏览器级别实际发生的是第一个页面被加载,并且该页面中有一个 iframe,它正在向服务器发出第二个请求。
  2. 第二个请求无法 FindControl 您的控件,因为它不在同一页面中,并且在该请求期间不活动。

所以你在这里有一些选择:

  1. 摆脱 iframe 并使用面板。这会将它们放在同一个请求中,并且能够找到彼此。
  2. (另外)当你这样做时,你会想要使用 Page.FindControl() 而不是 Parent.FindControl() 作为 FindControl 方法只是搜索控件的子控件集合,我认为你的控件将在页面上的其他位置.
  3. 在 iframe 的客户端,您可以使用一些 javascript 代码来访问外部页面的 DOM,并在那里设置它的可见性。
于 2008-09-23T21:40:22.027 回答
2

父文件:

<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 内的文档在加载时访问document objectwindow object并使用该getElementId()函数设置父文档正文内的输入值。

于 2008-09-23T21:46:41.153 回答
0

对于初学者来说,FindControl不是 Javascript 中的函数。

于 2008-09-23T21:14:21.357 回答
0

或者,这里有一个更有用的查找控制例程......

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
于 2008-09-23T21:50:42.703 回答