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