2013-03-26 7 views
5

voglio chiudere il RadWindow e aggiornare il genitore: come fare questo lato server:Come chiudere il radwindow sul lato server e aggiornare la pagina padre

ho il seguente caso:

Due pagine dicono :

parent.aspx:

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

e genitore. 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); 
     } 

Io chiamo questo metodo nel rowcommand di qualche GridView sul mio parentpage:

come questo:

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

Ora voglio l'evento lato server click di alcuni pulsante sulla pagina child per chiudere la finestra di rad e aggiornare il genitore come fare questo ??

risposta

7

Come hai detto, si vuole chiudere dal codice dietro. In questo modo è possibile eseguire il rendering del codice Page.ClientScript.RegisterClientScriptBlock(GetType(), "CloseScript", "refreshParentPage()", true); per aggiornare il genitore.

Basta aggiungere il seguente codice e script nella Pagina Bambino. Nessun codice è necessario nella pagina madre.

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

Aggiornamento:

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

Ho ricevuto il seguente messaggio da firefox: 'Per visualizzare questa pagina, Firefox deve inviare informazioni che ripeteranno qualsiasi azione (come una ricerca o conferma d'ordine) che sia stata eseguita in precedenza. –

+1

La pagina principale è stata postposta sul server in precedenza. In tal caso, è necessario assicurarsi che la pagina padre non venga postata, prima che l'utente apra il figlio RadWindow. O utilizzare il ** codice aggiornato ** che reindirizza la pagina padre a se stessa anziché ricaricare. – Win

4

È necessario utilizzare il metodo getRadWindow().close() e l'evento OnClientClose.

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

Quando si crea il RadWindow in Parent.cs, aggiungere l'evento OnClientClose: newWindow.OnClientClose = "OnChildWindowClosed";.

E su 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

Viene visualizzato il seguente messaggio da firefox: 'Per visualizzare questa pagina, Firefox deve inviare informazioni che ripeteranno qualsiasi azione (come una ricerca o una conferma dell'ordine) eseguita in precedenza. –

+0

window.location.reload() tenta di eseguire di nuovo l'ultimo postback e non è possibile impedirlo. Prova invece window.location.href = window.location.href. Di solito funziona, a meno che tu non abbia un hash nell'URL. – rdmptn

-1

modo semplice per imporre la chiusura della finestra rad, appena messo dentro pannello di aggiornamento del genere:

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

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

Importante: si deve applicare questa proprietà al pannello di aggiornamento:

UpdateMode = "Conditional" RenderMode = "Block"

poi dentro il pulsante che si desidera eseguire il comando di chiusura eseguire:

UpdatePanel1.update() 

questo comando si chiuderà radwindow e nessun aggiornamento alla tua pagina web e senza bisogno di javascript , L'ho provato.

+0

Non farlo a meno che non capiate perché funziona e perché è una cattiva idea e quale problema può causare. Rivedi prima questo articolo: http://docs.telerik.com/devtools/aspnet-ajax/controls/window/how-to/how-to-use-radwindow-with-ajax – rdmptn

Problemi correlati