Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to close the parent window from its child?

I have the following case:

I have a gridview on my page :

page1.aspx

I open another page(page2.aspx) through that gridview in a rad window then after that,through some button on page2.aspx i open the last page (page3.aspx) in a rad window also.

all these steps are performed through server side code :


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

What i want to do is :

when clicking on a specific button on my (page3.aspx) close it and its parent page2.aspx.

How to do this (server side)?

I try this :but it just closes the child page3.aspx i want to close the parent page2.aspx also ?!


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

            RadAjaxManager1.ResponseScripts.Add("CloseModal();");
        }
like image 339
Anyname Donotcare Avatar asked Mar 28 '13 14:03

Anyname Donotcare


2 Answers

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

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

If the CloseModal() event is firing correctly, you should be able to call window.close() within it. The RadWindows only exist in the context of the parent window so you should still be able to call window.close() which will close each window that's open.

Edit: although a bit off-topic, this link from Telerik shows you how to get a handle on the parent window from a RadWindow. Then you can call the close method client side to close the browser window (page1.aspx) which will close all subsequent RadWindows.

From this link:

The main difference between RadWindow and browser's popup is that just like any other DHTML element, RadWindow exists only in the context of the page in which it is created. It cannot leave the boundaries of the browser window.

like image 85
dst3p Avatar answered Oct 03 '22 06:10

dst3p


You can do a bubble event by implement an interface a each parent. I try to illustrate my mind.

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

That includes you must declare the RadWindow into the parent. So in a hierarchical view that seems to be like that :

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

I think you can with this solution manage the closing process like you want and change whenever or whatever you want.

like image 35
D4rkTiger Avatar answered Oct 03 '22 05:10

D4rkTiger