当子页面关闭时,是否可以在父页面上调用服务器端事件?

时间:2010-01-13 15:38:12

标签: asp.net javascript ajax

我有一个包含两个数据控件的父页面。我希望能够打开一个子窗口,对它做一些事情,当它关闭时,我想只重新绑定父页面上的两个数据控件之一。我有一个想要在UpdatePanel中更新的控件,所以想调用它重新绑定它并调用UpdatePanel.Update()。

2 个答案:

答案 0 :(得分:2)

从子窗口,您实际上无法“调用”父页面的服务器端功能,但是您可以使用一些javascript来调用该页面上的客户端功能。

在父页面上:

<script language="Javascript" type="text/javascript">
function CallAlert()
{
    alert("This is parent window's alert function.");
}
</script>

在子页面上:

<script language="Javascript" type="text/javascript">
function CallParentWindowAlert()
{
    window.opener.CallAlert();
    return false;
}
</script>

在您提供的示例中,特别是在您拥有UpdatePanel的情况下,您实际上在这里留下了一些选项。如果UpdatePanel设置了某种形式的触发器以强制它更新,无论是所有子项还是仅指定的子项,在父函数中,您可以强制对其中一个控件进行回发。最终,父页面javascript函数应该具有某种形式的__doPostBack()调用,引用控件的id和一些(空的)参数,但是你可能最好通过代码隐藏来生成javascript:

Page.ClientScript.GetPostBackEventReference(control, null);

一旦将它们组合在一起,就可以将实际调用与您在子页面上所需的任何客户端事件联系起来,无论是在UnLoad()上还是在您调用的某个自定义函数中。

答案 1 :(得分:0)

尝试这一点,你要做的就是在主页上调用__doPostBack,以更新面板或更新面板中的某些内容为准。

家长代码:

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <h1>Parent Window</h1>
        Time:
        <%= DateTime.Now.ToString() %>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                Update Panel Time<%= DateTime.Now.ToString() %>
                <br />
                <asp:Button ID="Button1" Text="Submit" runat="server" />
                <a href="#" onclick="window.open('child.aspx')">Click To Open Child Window</a>
            </ContentTemplate>
        </asp:UpdatePanel>
    </div>
    </form>
</body>
</html>

儿童代码:

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>

    <script type="text/javascript" language="javascript">
        function UnloadMe() {
            if (opener) {
                opener.__doPostBack("UpdatePanel1", "");
            }
        }
    </script>

</head>
<body onunload="UnloadMe()">
    <form id="form1" runat="server">
    <div>
    <h1>Child Window</h1>
    </div>
    </form>
</body>
</html>