How to close the radwindow on serverside and refresh the parent page

30,730

Solution 1

As you said, you want to close from code behind. So you can render Page.ClientScript.RegisterClientScriptBlock(GetType(), "CloseScript", "refreshParentPage()", true); from code behind to refresh the parent.

Just add the following code and script in Child Page. No code is needed in parent page.

<script>         
    function getRadWindow() {
        var oWindow = null;
        if (window.radWindow)
            oWindow = window.radWindow;
        else if (window.frameElement.radWindow)
            oWindow = window.frameElement.radWindow;
        return oWindow;
    }

    // Reload parent page
    function refreshParentPage() {
        getRadWindow().BrowserWindow.location.reload();
    }
</script>

<asp:Button runat="server" Text="Close" ID="CloseButton" 
    OnClick="CloseButton_Click"/>

protected void CloseButton_Click(object sender, EventArgs e)
{
    Page.ClientScript.RegisterClientScriptBlock(GetType(), 
        "CloseScript", "refreshParentPage()", true);
}

Update:

// Redirect page page to url
function redirectParentPage(url) {
    getRadWindow().BrowserWindow.document.location.href = url;
}

// Code behind
Page.ClientScript.RegisterClientScriptBlock(GetType(), 
"CloseScript", "redirectParentPage('Parent.aspx')", true);

Solution 2

You should use the getRadWindow().close() method and the OnClientClose event.

On Child.aspx:

<script type="text/javascript">

    function getRadWindow() {
        var oWindow = null;

        if (window.radWindow) 
            oWindow = window.radWindow;
        else if (window.frameElement.radWindow) 
            oWindow = window.frameElement.radWindow;

        return oWindow;
    }

    function clientClose(arg) {   
        getRadWindow().close(arg);
    }

</script>

In Child.cs:

protected void btn_Click(object sender, EventArgs e)
{         
    ScriptManager.RegisterStartupScript(Page, typeof(Page), "closeScript", "clientClose('');", true);
}

When creating your RadWindow in Parent.cs, add the OnClientClose event: newWindow.OnClientClose = "OnChildWindowClosed";.

And on Parent.aspx:

<script type="text/javascript">

    function OnChildWindowClosed(sender, eventArgs) {
        document.location.reload(); // there may be a cleaner way to do the refresh
    }

</script>
Share:
30,730
Anyname Donotcare
Author by

Anyname Donotcare

Updated on September 25, 2020

Comments

  • Anyname Donotcare
    Anyname Donotcare almost 4 years

    I want to close the RadWindow and refresh the parent : how to do this server side :

    I have the following case:

    Two pages say :

    parent.aspx :

    <telerik:RadWindowManager ID="RadWindowManager1" runat="server" EnableViewState ="false">
    </telerik:RadWindowManager>
    

    and parent.cs

      protected void OpenNewWindow(string url, int width, int height,int mode)
            {
                RadWindow newWindow = new RadWindow();
                newWindow.NavigateUrl = url;
                newWindow.VisibleOnPageLoad = true;
                newWindow.KeepInScreenBounds = true;
                if (width > 0)
                {
                    newWindow.Width = width;
    
    
                }
                if (height > 0)
                {
                    newWindow.Height = height;
                }
                newWindow.VisibleStatusbar = false;
                if (mode == 0)
                {
                    newWindow.DestroyOnClose = true;
                    newWindow.InitialBehaviors = WindowBehaviors.Maximize;
                }
                RadWindowManager1.Windows.Add(newWindow);
            }
    

    i call this method in the rowcommand of some gridview on my parentpage :

    like this :

    OpenNewWindow("child.aspx", 0, 0,0);
    

    Now i want on the server side click event of some button on the child page to close the rad window and refresh the parent one how to do this ??