Fermeture de RadWindow en invoquant javascript depuis le serveur

J'ai un contrôle qui ressemble à ceci:

<telerik:RadCodeBlock runat="server"> <script type="text/javascript"> function refresh() { window.$find("<%= RadAjaxManager1.ClientID %>").ajaxRequest("RebindRecommendations"); } </script> </telerik:RadCodeBlock> <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server" OnAjaxRequest="AjaxRequest"> <AjaxSettings> <telerik:AjaxSetting AjaxControlID="RadAjaxManager1"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="NameOfGrid" /> </UpdatedControls> </telerik:AjaxSetting> </AjaxSettings> </telerik:RadAjaxManager> <telerik:RadWindowManager ID="RadWindowManager1" runat="server"> <Windows> <telerik:RadWindow ID="RadWindow1" runat="server" NavigateUrl="UrlOfPage" OnClientClose="refresh"></telerik:RadWindow> </Windows> </telerik:RadWindowManager> 

Page:

 <script type="text/javascript"> function closeWindow() { self.close(); return false; } </script> <!-- form fields here --> <telerik:RadButton runat="server" ID="_cancel" Text="Cancel" OnClientClick="closeWindow"></telerik:RadButton> <telerik:RadButton runat="server" ID="_submit" Text="Submit" OnClientClick="closeWindow" OnClick="DoSomeDataBaseStuff"></telerik:RadButton> 

Cela fonctionne comme prévu. Mon RadWindow est supprimé et la grille de mon contrôle se rafraîchit en appuyant sur les boutons d'annulation ou de soumission. Le problème est que la base de données n'est pas finie de faire son travail à ce moment-là afin que le rafraîchissement de la grille ne révèle pas les changements. J'ai essayé de changer mon implémentation de la page pour ressembler à ceci:

Page:

 <script type="text/javascript"> function closeWindow() { self.close(); return false; } </script> <!-- form fields here --> <telerik:RadButton runat="server" ID="_cancel" Text="Cancel" OnClick="CallJavaScriptToKillWindow"></telerik:RadButton> <telerik:RadButton runat="server" ID="_submit" Text="Submit" OnClick="DoSomeDataBaseStuffAndThenCallJavaScriptToKillWindow"></telerik:RadButton> 

Code Behind appelle finalement après la fin de la base de données:

 ClientScript.RegisterStartupScript(GetType(), "Key", "closeWindow();", true); 

J'ai frappé mon point d'arrêt dans la fonction closeWindow, mais il n'a pas le même comportement (la fenêtre ne se ferme pas). J'ai essayé différentes itérations comme:

 ClientScript.RegisterStartupScript(GetType(), "Key", "$(document).ready(function() {return closeWindow();});", true); 

En vain. Qu'est-ce qui me manque?

Qu'est-ce que le «soi»? Ne veux-tu pas dire "ça"?

Essayez-vous de fermer RadWindow à partir de la fenêtre ou de la page qui lance la fenêtre?

De l'intérieur d'une fenêtre, je fais généralement ceci:

  function GetRadWindow() { var oWindow = null; if (window.radWindow) oWindow = window.radWindow; else if (window.frameElement.radWindow) oWindow = window.frameElement.radWindow; return oWindow; } function Close() { var oWindow = GetRadWindow(); oWindow.argument = null; oWindow.close(); return false; } 

En outre, j'utiliserais ScriptManager.RegisterStartupScript plutôt que ClientScript.

Je suis certain que j'ai rencontré cette question avant, et je pense que cela l'a corrigé:

 setTimeout("self.close()", 1000); 

Si cela ne fonctionne pas, essayez ceci:

 setTimeout("self.focus()", 500); //adjust the timeout as needed setTimeout("self.close()", 1000); 

Vous pouvez également le faire de cette façon si vous préférez:

 setTimeout(function(){ self.close(); }, 1000); 

Je ne suis pas sûr d'améliorer cette réponse, j'essaie simplement de comprendre plus facilement. J'ai une fenêtre rad qui est ouverte à partir d'une page principale. La radwindow est ouverte dans Code Behind (C #), pas Javascript. Lorsque mon utilisateur clique sur un bouton Enregistrer sur RadWindow, il exécute certaines tâches logiques, puis il ferme la radwindow elle-même. Vous devez simplement:

Mettez ce bloc de code dans vous RadWindow aspx …..

 <telerik:RadCodeBlock runat="server" ID="rcb1"> <script language="javascript" 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 CloseDialog(button) { GetRadWindow().close(); } </script> </telerik:RadCodeBlock> 

Placez ce code dans le bouton de votre RadWindow après avoir effectué votre logique de pré-fermeture (le même bouton qui effectue l'autre logique ferme la fenêtre)

C # ClientScript.RegisterStartupScript (typeof (chaîne), "", "CloseDialog ();");

OU

VB ClientScript.RegisterStartupScript (Me.GetType (), "", "CloseDialog ();")

Si vous vous demandez comment ouvrir le radwindow de codebehind, voici comment je l'ai fait:

 RadWindow window1 = new RadWindow(); // Set the window properties window1.NavigateUrl = "winStrengthChart.aspx?EMPLOYIDNAME=" + parmString; window1.ID = "RadWindow1"; window1.Width = 800; window1.Height = 650; window1.VisibleStatusbar = false; window1.Behaviors = Telerik.Web.UI.WindowBehaviors.Close | Telerik.Web.UI.WindowBehaviors.Resize | Telerik.Web.UI.WindowBehaviors.Move; window1.VisibleOnPageLoad = true; // Set this property to True for showing window from code rwm1.Windows.Add(window1); this.Form1.Controls.Add(window1); 

… ET bien sûr, vous avez besoin d'un RadWindowManager de base sur la page principale qui ouvre la fenêtre:

 <telerik:RadWindowManager ID="rwm1" runat="server"> <Windows> </Windows> </telerik:RadWindowManager> 

Cela devrait fonctionner si je me suis trompé, corrigez-moi.

Merci