web-dev-qa-db-fra.com

Fermer par programme la page aspx à partir du code situé derrière

Quel est le meilleur moyen de fermer une page ASPX à partir de code-behind? 

J'ai un gestionnaire d'événements de bouton que je veux fermer la page après que l'utilisateur a cliqué sur un bouton ASP.NET sur la page. J'ai essayé d'ajouter par programme une méthode JavaScript contenant une commande window.close() à l'événement OnClientClick pour fermer la page, mais cela ne fonctionne pas. Le bouton est également un asp:AsyncPostBoskTrigger pour un panneau de mise à jour AJAX.

L'application utilise .NET Framework 3.5.

29
Michael Kniskern

METTRE À JOUR: J'ai pris en compte toutes vos suggestions et proposé la solution suivante: 

Dans le code derrière:

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

En page aspx:

function CloseWindow() {
    window.close();
}
8
Michael Kniskern

Vous feriez généralement quelque chose comme:

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

Cependant, gardez à l'esprit que différentes choses se produiront dans différents scenerios . Firefox ne vous laissera pas fermer une fenêtre que vous n'avez pas ouverte (ouverte avec window.open()).

IE7 invite l'utilisateur avec une boîte de dialogue "Cette page tente de fermer (Oui | Non)".

Dans tous les cas, vous devez être prêt à gérer la fenêtre qui ne ferme pas toujours!

Un correctif pour les 2 problèmes ci-dessus consiste à utiliser:

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

Et créez un fichier close.html:

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

Notez que close.html sera redirigé vers default.aspx si la fenêtre ne se ferme pas après 2 secondes pour une raison quelconque.

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

        }
10
SP007

Une publication est le processus de rechargement d'une page. Si vous voulez que la page se ferme après la publication, vous devez configurer votre javascript window.close () pour qu'il s'exécute avec l'événement onload du navigateur au cours de cette publication, généralement à l'aide de la commande ClientScript.RegisterStartupScript() fonction.

Mais êtes-vous sûr que c'est ce que vous voulez faire? La fermeture des pages a tendance à faire chier les utilisateurs.

6
Joel Coehoorn

Vous devez injecter un script de démarrage qui ferme la page une fois la publication terminée.

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

Vous devez simplement ajouter cette propriété dans votre élément asp: Button (par exemple):

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

Ça fonctionne parfaitement.

4
Lasco

Vous pouvez fermer une fenêtre en collant simplement le code de fermeture de la fenêtre dans l'événement OnClientClick du bouton dans le balisage.

2
Perpetualcoder

Si vous utilisez RadAjaxManager, voici le code qui aide:

RadAjaxManager1.ResponseScripts.Add("window.opener.location.href = '../CaseManagement/LCCase.aspx?" + caseId + "'; 
window.close();");

si vous ouvrez une page sur JavaScript popup alors

 Response.Write("<script>javascript:window.close();</script>");

va faire le travail

1
ArunPratap

Pour fermer une application Windows asp.net,

  • Il suffit de faire glisser un bouton dans la page de conception
  • Puis écrivez le code donné ci-dessous dans son événement click

           "   this.close();  "
    

c'est à dire:

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

Vous pouvez simplement utiliser ceci .. court et facile.

Response.Write("<script>window.close();</script>");

J'espère que cela t'aides.

0
John Robert

Pour ceux qui se demandent pourquoi ils ne peuvent pas obtenir les réponses fournies, c'est parce que la page doit avoir été ouverte par javascript pour pouvoir être fermée par javascript.

Étant donné que la plupart des personnes rencontrant cette question asp utilisent probablement un asp:hyperlink ou une sorte de redirection asp pour naviguer vers la page à fermer. Ces méthodes de redirection n'utilisent pas javascript et ne seront donc pas fermées par javascript.

J'ai trouvé une solution simple pour mon application, qui élimine la NavigateUrl et utilise le asp:Hyperlink.Attributes pour ajouter une onclick au lien hypertexte qui utilise un script Java pour ouvrir la fenêtre devant être fermée par javascript.

aspHyperlink.NavigateUrl = "https://www.google.com";

Le NavigateUrl ci-dessus est supprimé et nous attachons à la place notre événement click.

aspHyperlink.Attributes.Add("onclick", "javascript:openInNewTab('https://www.google.com');");

Et dans le code derrière la page contenant notre aspHyperlink, nous avons le javascript pour ouvrir l'URL fournie par Rinto

function openInNewTab(url) {
         var win = window.open(url, '_blank');
         win.focus();
     } 

Désormais, toutes les pages ouvertes avec openInNewTab peuvent être fermées avec les réponses fournies.

window.close();
0
clamchoda
  protected void Button1_Click(object sender, EventArgs e)
  {
    Button1.Attributes.Add("onclick"," CloseWindow();");
  }

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