2008-12-17 14 views
23

Was ist der beste Weg, um eine ASPX-Seite aus dem Code-Behind zu schließen?Programmatisch schließen ASPX-Seite von Code hinter

Ich habe eine Schaltfläche Event-Handler, die ich die Seite schließen möchte, nachdem der Benutzer eine ASP.NET-Schaltfläche auf der Seite geklickt hat. Ich habe versucht, eine JavaScript-Methode, die einen window.close()-Befehl enthält, programmgesteuert zum Ereignis OnClientClick hinzuzufügen, um die Seite zu schließen, aber es funktioniert nicht. Die Schaltfläche ist auch ein asp:AsyncPostBoskTrigger für ein AJAX Update Panel.

Die Anwendung verwendet .NET Framework 3.5.

Antwort

8

UPDATE: Ich habe alle Ihre Eingaben und kam mit der folgenden Lösung wurde:

In Code hinter:

protected void Page_Load(object sender, EventArgs e)  
{ 
    Page.ClientScript.RegisterOnSubmitStatement(typeof(Page), "closePage", "window.onunload = CloseWindow();"); 
} 

In aspx Seite:

function CloseWindow() { 
    window.close(); 
} 
+0

es macht ein Postback, und in dem zweiten Klick, IE fragt Bestätigung, um den Browser zu schließen. – Bachask8

7

Ein Postback ist der Prozess des erneuten Ladens einer Seite. Wenn Sie also möchten, dass die Seite nach dem Postback geschlossen wird, müssen Sie Ihr window.close() Javascript mit dem Onload-Ereignis des Browsers während dieses Postbacks ausführen. normalerweise mit der ClientScript.RegisterStartupScript() Funktion.

Aber sind Sie sicher, dass dies das ist, was Sie tun möchten? Das Schließen von Seiten neigt dazu, Nutzer zu verärgern.

4

Sie sollten ein Startskript injizieren, das die Seite schließt, nachdem das Postback beendet wurde.

ClientScript.RegisterStartupScript(typeof(Page), "closePage", "<script type='text/JavaScript'>window.close();</script>"); 
+0

Es wird verwendet, dass die Codezeile auf meiner Seite und schloss es sofort. Ich muss die Seite schließen, sobald der Benutzer auf das Steuerelement ASP.NET auf der Seite klickt. –

+0

Setzen Sie es in den Button onclick Event-Handler im Codebehind. – EndangeredMassa

42

Sie würden normalerweise etwas tun wie:

protected void btnClose_Click(object sender, EventArgs e) 
{ 
    ClientScript.RegisterStartupScript(typeof(Page), "closePage", "window.close();", true); 
} 

Beachten Sie jedoch, dass verschiedene Dinge in verschiedenen Szenarien passieren werden. Firefox lässt Sie kein Fenster schließen, das nicht von Ihnen geöffnet wurde (geöffnet mit window.open()).

IE7 wird den Benutzer mit einem Dialogfeld "Diese Seite versucht zu schließen (Yes | No)" aufgefordert.

In jedem Fall sollten Sie bereit sein, mit dem Fenster umzugehen, das nicht immer schließt!

Ein Update für die 2 oben genannten Probleme zu verwenden:

protected void btnClose_Click(object sender, EventArgs e) { 
    ClientScript.RegisterStartupScript(typeof(Page), "closePage", "window.open('close.html', '_self', null);", true); 
} 

Und eine close.html erstellen:

<html><head> 
<title></title> 
<script language="javascript" type="text/javascript"> 
    var redirectTimerId = 0; 
    function closeWindow() 
    { 
     window.opener = top; 
     redirectTimerId = window.setTimeout('redirect()', 2000); 
     window.close(); 
    } 

    function stopRedirect() 
    { 
     window.clearTimeout(redirectTimerId); 
    } 

    function redirect() 
    { 
     window.location = 'default.aspx'; 
    } 
</script> 
</head> 
<body onload="closeWindow()" onunload="stopRedirect()" style=""> 
    <center><h1>Please Wait...</h1></center> 
</body></html> 

Beachten Sie, dass close.html wenn das Fenster default.aspx wird umleiten schließt nach 2 Sekunden aus irgendeinem Grund nicht.

2

können Sie ein Fenster schließen, indem Sie einfach das Fenster schließen Code in der zum Schließen einer asp

10
protected void btnOK_Click(object sender, EventArgs e) 
     { 

      // Your code goes here. 
      if(isSuccess) 
      { 
        string close = @"<script type='text/javascript'> 
           window.returnValue = true; 
           window.close(); 
           </script>"; 
      base.Response.Write(close); 
      } 

     } 
1

im Markup OnClientClick Ereignis der Schaltfläche einfügen.Netto-Windows-Anwendung,

  • Ziehen Sie einfach eine Schaltfläche in das Design Seite
  • dann den unten angegebenen Code in seinem Click-Ereignis schreiben

     " this.close(); " 
    

dh:

private void button2_Click(object sender, EventArgs e) 
{ 
     this.Close(); 
} 
5

Sie müssen diese Eigenschaft nur in Ihrem asp: Button-Element hinzufügen (zum Beispiel):

OnClientClick="javascript:window.close();" 

Es funktioniert perfekt.

2

Wenn Sie RadAjaxManager verwenden hier dann ist der Code, der hilft:

RadAjaxManager1.ResponseScripts.Add("window.opener.location.href = '../CaseManagement/LCCase.aspx?" + caseId + "'; 
window.close();"); 
0
protected void Button1_Click(object sender, EventArgs e) 
    { 
    Button1.Attributes.Add("onclick"," CloseWindow();"); 
    } 

    <script type="text/javascript"> 
     function CloseWindow() 
     { 
     window.close(); 
     } 
    </script> 
+2

Bitte korrigieren Sie die Formatierung Ihres Codes. Geben Sie auch einen Text an, um es zu erklären. – buhtz