如何使用C#从iframe访问父元素?

7

我正在开发一个使用 asp.Net 技术的网站,使用 iframe 标签加载单独的页面。 这个单独的页面名为 Districting.aspx,包含一个 asp button 控件,点击该控件时会调用一个 C# 函数,名为 DoneClicked()。 这是 asp button 控件:

<asp:Button ID="LinkButtonDone" CssClass="button button-yellow" runat="server" OnClick="DoneClicked" Text="Done" />

在代码后台,DoneClicked函数:
protected void Doneclicked(object sender, EventArgs e)
    {
        // Some code here
        // Calling a function from Default page
    }

我需要做的是,在DoneClicked函数结束时,必须调用来自Default.aspx页面的一个函数。

那么我该如何在iframe页面中的代码后台访问Default.aspx.cs中的函数呢?

谢谢:)

3个回答

3
尝试下面的方法,对我有用:
在代码后端中:
protected void Doneclicked(object sender, EventArgs e)
    {
        ScriptManager.RegisterStartupScript(this, this.GetType(), "scriptid", "window.parent.location.href='ParentPageName.aspx';", true);  
 }

2
@Aristos/@Divya Rana/@Hanady:你们谁能解释一下上面的解决方案是如何从Default.aspx.cs文件(父页面)调用方法的? - C.M.W.
@C.M.W. 你实际上并没有调用一个方法,你只是在页面渲染时编写了一些 JavaScript 代码来调用它-或者运行你所期望的内容。 - Aristos

2

您不能直接访问它(至少不建议这样做)。

您应该将Default.aspx中的公共代码抽象出来,放到一个类中,以便两个页面都可以使用。


0

你不能直接这样做,但是你可以使用JavaScript间接地实现。

因此,你可以在默认页面上创建一个隐藏的按钮,可以通过以下方式调用DoneClicked函数:

<div style="display:none">
    <asp:Button ID="Done" runat="server" ClientIDMode="Static" OnClick="DoneClicked " />
</div>

并且在加载Districting.aspxiframe内部,您可以使用JavaScript通过单击按钮调用“DoneClicked”:

<script type="text/javascript">
   window.parent.document.getElementById('Done').click();
<script>

请注意 ClientIDMode="Static",因为从其他页面无法知道渲染的 ID 是什么,所以保持静态。如果您不使用具有静态 ID 的 .net 4,则还需要使用 JavaScript 将渲染的 ID 发送到页面,或者使用其他方法来定位按钮。
另请注意 window.parent.,它可以从 iframe 中“看到”包含 iframe 的页面的控件的 DOM 结构。

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