2013-03-26 8 views
5

Ich möchte aktualisieren Sie die RadWindow und aktualisieren Sie die Eltern schließen: wie diese Server-Seite zu tun:Wie die radwindow auf server schließen und die übergeordneten Seite

Ich habe folgenden Fall:

Zwei Seiten sagen :

parent.aspx:

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

und Eltern.

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

Ich nenne diese Methode in der RowCommand einiger gridview auf meinem parentpage:

wie folgt aus:

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

Jetzt möchte ich auf der Server-Seite Click-Ereignis von einigen Knopf auf der child Seite, um das rad Fenster zu schließen und das Elternteil zu erneuern, wie man das macht ??

Antwort

7

Wie Sie sagten, Sie wollen hinter von Code zu schließen. So können Sie Page.ClientScript.RegisterClientScriptBlock(GetType(), "CloseScript", "refreshParentPage()", true); aus dem Code rendern, um das übergeordnete Element zu aktualisieren.

Fügen Sie einfach den folgenden Code und das Skript in Child Page hinzu. Auf der übergeordneten Seite ist kein Code erforderlich.

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

aktualisieren:

// 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); 
+0

Ich erhalte die folgende Meldung von Firefox: 'Um diese Seite anzuzeigen, muss Firefox Informationen senden, die eine zuvor durchgeführte Aktion (z. B. eine Suche oder eine Auftragsbestätigung) wiederholen. –

+1

Ihre übergeordnete Seite wurde zuvor an den Server gesendet. Wenn dies der Fall ist, müssen Sie sicherstellen, dass die übergeordnete Seite nicht zurückgebucht wird, bevor der Benutzer das RadWindow-Element öffnet. ODER verwenden Sie den ** aktualisierten Code **, der die übergeordnete Seite zu sich selbst umleitet, anstatt neu zu laden. – Win

4

Sie sollten die Methode getRadWindow().close() und das Ereignis OnClientClose verwenden.

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

Wenn Ihr RadWindow in Parent.cs erstellen, fügen Sie die OnClientClose Veranstaltung: newWindow.OnClientClose = "OnChildWindowClosed";.

und auf Parent.aspx:

<script type="text/javascript"> 

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

</script> 
+0

Ich bekomme die folgende Nachricht von Firefox: 'Um diese Seite anzuzeigen, muss Firefox Informationen senden, die jede Aktion (wie eine Suche oder Auftragsbestätigung) wiederholen, die früher durchgeführt wurde. –

+0

window.location.reload() versucht, das letzte Postback erneut auszuführen, und Sie können das nicht verhindern. Probieren Sie stattdessen window.location.href = window.location.href. Es würde normalerweise funktionieren, außer Sie haben einen Hash in der URL. – rdmptn

-1

einfache Art und Weise zu zwingen rad Fenster zu schließen, ist es einfach so im Inneren Update-Panel setzen:

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

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

Wichtig: Sie können diese Eigenschaften beantragen zum Aktualisierungsfenster:

UpdateMode = "Bedingt" Render = „Block“

dann innerhalb der Schaltfläche Sie den Schließen-Befehl ausführen möchten ausführen:

UpdatePanel1.update() 

dieser Befehl radwindow schließen und keine Auffrischung Ihrer Webseite und keine Notwendigkeit, Javascript , Ich versuchte es.

+0

Tun Sie das nicht, wenn Sie nicht verstehen, warum es funktioniert und warum es eine schlechte Idee ist und welches Problem es verursachen kann. Lesen Sie zuerst diesen Artikel: http://docs.telerik.com/devtools/aspnet-ajax/controls/window/how-to/how-to-use-radwindow-with-ajax – rdmptn