2013-03-28 17 views
15

Mam następujący przypadek:Jak zamknąć okno nadrzędne nad jego dzieckiem?

Mam GridView na moją stronę:

page1.aspx 

otworzyć kolejną stronę (page2.aspx) przez tego GridView w rad window następnie po tym, przez jakiś przycisk na page2.aspx ja otwórz ostatnią stronę (page3.aspx) również w postaci rad window.

wszystkie te czynności wykonywane są za pomocą kodu po stronie serwera:


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); 
     } 

co chcę zrobić, to:

po kliknięciu konkretnego przycisku na mój (page3.aspx) zamknij to i jego rodzic page2.aspx.

Jak to zrobić (po stronie serwera)?

Próbuję tego: ale to po prostu zamyka dziecko page3.aspx chcę również zamknąć rodzica page2.aspx?!


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

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

Gdy strony 2 i strona 3 są oddzielnymi stronami, nie można łatwo zamknąć strony 2 ze strony 3. – realnero

+1

to page2.aspx rodzica pf page3.aspx? –

+0

tak 'page2.aspx' ma przycisk po kliknięciu otwiera' page3.aspx' –

Odpowiedz

2

To może brzmieć rustykalny, ale dlaczego nie można po prostu wykonać kod serwera, który chcesz uruchomić przed zamknięciem, a następnie powrócić do klienta parametr bool, który pozwala na uruchamianie jeżeli oświadczenie, że zamyka okno (po stronie klienta)?

PS: Myślę algorytmicznie, nie mam dużego doświadczenia z C# po stronie serwera.

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

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

Jeżeli zdarzenie CloseModal() jest wypalanie poprawnie, powinieneś być w stanie wywołać window.close() wewnątrz niej. RadWindows istnieją tylko w kontekście okna nadrzędnego, więc nadal powinieneś być w stanie zadzwonić pod numer window.close(), który zamknie każde otwarte okno.

Edit: choć trochę off-topic, this link z Telerik pokazuje, jak uzyskać uchwyt okna nadrzędnego ze RadWindow. Następnie możesz wywołać metodę zamykania strony klienta, aby zamknąć okno przeglądarki (page1.aspx), które zamknie wszystkie kolejne okna RadWindows.

Od this link:

Główną różnicą pomiędzy RadWindow i okienko przeglądarki jest to, że tak jak każdy inny element DHTML, RadWindow istnieje tylko w kontekście strony, w którym jest utworzony. Nie może opuścić granic okna przeglądarki.

7

Możesz zrobić zdarzenie bubble poprzez zaimplementowanie interfejsu dla każdego z rodziców. Próbuję zilustrować mój umysł.

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  
    } 
} 

Obejmuje to zadeklarowanie RadWindow na rodzica.Więc w widoku hierarchicznym, który wydaje się być tak:

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

myślę, że można z tego rozwiązania zarządzać procesem zamykania jak chcesz i kiedy zmienić lub co chcesz.

+0

: 'this.Parent' ma wartość null! –

Powiązane problemy