2013-03-28 2 views
15

나는 다음과 같은 경우가 있습니다자식 창에서 부모 창을 닫는 방법?

내 페이지에있는 gridview 있습니다

page1.aspx 

가 나는 rad window에 그있는 gridview를 통해 다른 페이지 (page2.aspx를) 열을 그 후, page2.aspx에 대한 몇 가지 버튼을 통해 내가 rad window의 마지막 페이지 (page3.aspx)를 엽니 다.

모든 단계는 서버 측 코드를 통해 수행됩니다


protected void OpenNewWindow(string url, int width, int height, int mode) 
     { 
      RadWindow newWindow = new RadWindow(); 
      newWindow.NavigateUrl = url; 
      newWindow.VisibleOnPageLoad = true; 
      newWindow.KeepInScreenBounds = true; 
      newWindow.Skin = "Metro"; 
      if (width > 0) 
      { 
       newWindow.Width = width; 


      } 
      if (height > 0) 
      { 
       newWindow.Height = height; 
      } 
      newWindow.VisibleStatusbar = false; 
      if (mode == 0) 
      { 
       { 

       } 
       //newWindow.OnClientClose = "OnChildWindowClosed"; 
       newWindow.DestroyOnClose = true; 
       newWindow.InitialBehaviors = WindowBehaviors.Maximize; 
      } 
      RadWindowManager1.Windows.Add(newWindow); 
     } 

내가하고 싶은 것입니다 :

내 (page3.aspx) 주변의 특정 버튼을 클릭 그것과 부모는 page2.aspx.

수행 방법 (서버 측)?

나는 이것을 시험해 본다. 그러나 그것은 단지 어린이를 닫는다 page3.aspx 나는 부모를 닫고 싶다 page2.aspx?!


protected void Button1_Click(object sender, EventArgs e) 
     { 
      ((RadAjaxManager)this.Parent.FindControl("RadAjaxManager1")).ResponseScripts.Add("CloseModal();"); 

      RadAjaxManager1.ResponseScripts.Add("CloseModal();"); 
     } 
+0

page2와 page3이 분리 된 페이지가되면 바로 3 페이지에서 2 페이지를 닫을 수 없습니다. – realnero

+1

은 page2.aspx입니다. pf page3.aspx? –

+0

예'page2.aspx'는 버튼을 클릭하면 열립니다. 'page3.aspx' –

답변

2

이 소박한 들릴지 모르지만, 왜 당신은 단순히 당신이 종료하기 전에 실행 한 다음 클라이언트에이 경우 문을 실행할 수있는 부울 매개 변수를 반환 할 서버 코드를 실행하지 않는 창 (클라이언트 측)을 닫으시겠습니까?

추신 : 나는 algorithmically 생각하고있어, 나는 서버 측 C#에 많은 경험이 없다.

8
protected void Button1_Click(object sender, EventArgs e) 
{ 
    ((RadAjaxManager)this.Parent.FindControl("RadAjaxManager1")).ResponseScripts.Add("CloseModal();"); 

    RadAjaxManager1.ResponseScripts.Add("CloseModal();"); 
} 

CloseModal() 이벤트가 제대로 발사되면, 당신은 그 안에 window.close()를 호출 할 수 있어야합니다. RadWindows는 상위 창의 컨텍스트에만 존재하기 때문에 열려있는 각 창을 닫을 수있는 window.close()을 계속 호출 할 수 있어야합니다.

편집 : 조금 떨어져 주제, Telerik에서 this link가 어떻게 RadWindow에서 부모 윈도우에 대한 핸들을 얻는 방법을 보여줍니다 있지만. 그런 다음 닫기 메서드 클라이언트 측을 호출하여 브라우저 창 (page1.aspx)을 닫아 모든 후속 RadWindows를 닫을 수 있습니다. this link에서

:

RadWindow와 브라우저의 팝업의 주요 차이점은 다른 모든 DHTML 요소처럼, RadWindow 만이 생성 된 페이지의 컨텍스트에 존재한다는 것입니다. 브라우저 창 경계를 벗어날 수 없습니다.

7

각 상위 인터페이스를 구현하여 버블 이벤트를 수행 할 수 있습니다. 나는 내 마음을 설명하려고 노력한다.

public interface IClosingParent 
{ 
    void Close(); 
} 

public class PageA : System.Web.Page, IClosingParent 
{ 
    public void IClosingParent.Close() 
    { 
     //Code to close it or hide it 
    } 
} 

public class PageB : System.Web.Page, ClosingParent 
{ 
    public void IClosingParent.Close() 
    { 
     ((IClosingParent)this.Parent).Close(); 

     //Code to close it or hide it 
    } 
} 

public class PageC : System.Web.Page 
{   
    protected void ButtonClose_Click(object sender, EventArgs e) 
    { 
     ((IClosingParent)this.Parent).Close(); 

     //Code to close it or hide it  
    } 
} 

여기에는 부모에게 RadWindow를 선언해야합니다.그래서 그런 것 같다 계층보기 :

 
PageA : IClosingParent 
| 
|-- PageB : IClosingParent 
    | 
    |-- PageC 
     |-- ButtonClose 

나는 당신이이 솔루션을 원하는처럼 닫는 프로세스를 관리하고 필요할 때마다 또는 무엇이든 바꿀 수 있다고 생각합니다.

+0

:'this.Parent'는 null입니다! –

관련 문제