2013-03-28 2 views
15

У меня есть следующий случай:Как закрыть родительское окно из своего дочернего элемента?

У меня есть GridView на моей странице:

page1.aspx 

я открываю другую страницу (page2.aspx) через этот GridView в rad window то после этого, через какую-то кнопку на page2.aspx я откройте последнюю страницу (page3.aspx) в rad window.

все эти действия выполняются через код на стороне сервера:


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

Как только страницы 2 и страницы 3 являются отдельными страницами, вы не можете легко закрыть страницу 2 со страницы 3. – realnero

+1

is page2.aspx родительский pf page3.aspx? –

+0

yes 'page2.aspx' имеет кнопку, когда я нажимаю на нее, открывается' page3.aspx' –

ответ

2

Это может показаться деревенским, но почему бы не просто выполнить код сервера, который вы хотите запустить до закрытия, а затем вернуться к клиенту параметра Его, что позволяет ему запустить, если заявление о том, закрывает окно (клиентская сторона)?

PS: Я думаю, что алгоритмически, у меня мало опыта с серверным 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(), который закроет каждое открытое окно.

Редактировать: хотя немного не по теме, this link от Telerik показывает вам, как получить дескриптор родительского окна из RadWindow. Затем вы можете вызвать клиентскую сторону метода close, чтобы закрыть окно браузера (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' is null! –