2010-01-13 4 views
0

두 개의 데이터 컨트롤이있는 상위 페이지가 있습니다. 자식 창을 열어서 뭔가를하고 싶을 때 부모 페이지의 두 데이터 컨트롤 중 하나만 리 바인드하고 싶을 때 닫으면됩니다. UpdatePanel 내에서 업데이트하려는 컨트롤이 있으므로 리바 인드를 호출하고 UpdatePanel.Update()를 호출하고 싶습니다.하위 페이지가 닫힐 때 상위 페이지에서 서버 측 이벤트를 호출 할 수 있습니까?

답변

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 함수는 컨트롤 및 일부 (빈) 매개 변수의 ID를 참조하는 __doPostBack() 호출의 일부 형식을 가져야합니다.

Page.ClientScript.GetPostBackEventReference(control, null); 
을 통해 해당 코드를 생성하는 것이 더 나을 것입니다.

일단 함께 사용하면 onUnLoad() 또는 호출하는 사용자 정의 함수에서 수행 할 모든 클라이언트 측 이벤트 (예 : 자식 페이지)에 실제 호출을 연결하는 것이 모두 문제입니다.

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> 
관련 문제