How to close the radwindow on serverside and refresh the parent page
Asked Answered
A

3

6

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

Araujo answered 26/3, 2013 at 14:58 Comment(0)
D
8

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);
Declaration answered 26/3, 2013 at 15:48 Comment(2)
I get the following message from firefox : To display this page, Firefox must send information that will repeat any action (such as a search or order confirmation) that was performed earlier.Araujo
Your parent page was posted back to server previously. If so, you need to make sure parent page is not posted back, before user opens child RadWindow. OR use the updated code which redirects parent page to itself instead of reload.Declaration
T
7

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>
Theone answered 26/3, 2013 at 15:32 Comment(3)
I get the following message from firefox : To display this page, Firefox must send information that will repeat any action (such as a search or order confirmation) that was performed earlier.Araujo
window.location.reload() attempts to perform the last postback again, and you can't prevent that. Try window.location.href = window.location.href instead. It would usually work, unless you have a hash in the URL.Duncan
I believe this is the better approach, because it fires and uses the OnClientClose event of RadWindow control. To solve the reload issue, use the function redirectParentPage from the update of @Declaration 's answer above. Use getRadWindow().close(arg); to pass the argument through to the function OnChildWindowClosed and use it there with window.location.href = eventArgs.get_argument();Biparty
D
-1

Simple way to force closing rad window, just put it inside update panel like that :

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" RenderMode="Block">
  <ContentTemplate>
     <telerik:RadWindow ID="RadWindow1" runat="server">
       <ContentTemplate>

       </ContentTemplate>
    </telerik:RadWindow>
  </ContentTemplate>
</asp:UpdatePanel>

Important: you have to apply this properties to the update panel :

UpdateMode="Conditional" RenderMode="Block"

then inside the button you want to execute the close command perform :

UpdatePanel1.update()

this command will close radwindow and no refresh to your Webpage and no need to javascript, I tried it.

Deoxyribose answered 24/9, 2016 at 19:41 Comment(1)
Don't do that unless you understand why it works and why it is a bad idea and what issue it can cause. Review this article first: docs.telerik.com/devtools/aspnet-ajax/controls/window/how-to/…Duncan

© 2022 - 2024 — McMap. All rights reserved.