2016-03-15 114 views
0

我有一个简单的要求。一旦关闭,需要从子窗口刷新父页面。我从一个按钮单击事件打开一个子窗口这样location.reload事件触发按钮点击事件

ClientScript.RegisterStartupScript(this.GetType(), "showPage", "javascript:showPage();", true); 

,并在父页面的JavaScript方法是

function showPage() { 
     window.open("Page2.aspx", "Shan", "width=200,height=200,scrollbars=no"); 
    } 

和儿童的网页我有

function refreshAndClose() { 
     window.opener.location.reload(); 
     self.close(); 

     //window.opener.location.href = "Default.aspx" 
     //self.close(); 
    } 

,并呼吁该在

<body onunload="refreshAndClose();">

现在它按照预期的方式工作,当我关闭子窗口时,它调用父窗口的页面加载事件,但它也会进入按钮点击事件(通过我称之为子窗口的按钮点击事件)并执行javascript方法再次。所以再次出现子窗口,并且这是递归的。

如何避免这种情况?我不适合asp.net。请帮帮我。

在此先感谢。

回答

0
 protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!Page.IsPostBack) 
      { 
       ClientScript.RegisterStartupScript(this.GetType(), "showPage", "javascript:showPage();", true); 
      } 
     } 

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm3.aspx.cs" Inherits="WebApplication4.WebForm3" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
    <script type="text/javascript"> 
     var myWindow; 
     function showPage() { 
      myWindow = window.open("Page2.aspx", "Shan", "width=200,height=200,scrollbars=no"); 

      setInterval(function() { 
       alert("ap"); 
       if (!myWindow) { 
        document.getElementById("msg").innerHTML = "'myWindow' has never been opened!"; 
       } else { 
        if (myWindow.closed) { 
         document.getElementById("msg").innerHTML = "'myWindow' has been closed!"; 
         form1.submit(); 
        } else { 
         document.getElementById("msg").innerHTML = "'myWindow' has not been closed!"; 
        } 
       } 
      }, 5000); 
     } 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <div> 
      <div id="msg"></div> 
     </div> 
    </form> 
</body> 
</html>