2008-12-17 37 views
23

¿Cuál es la mejor manera de cerrar una página ASPX desde el código subyacente?Cerrar programáticamente la página aspx del código detrás de

Tengo un controlador de eventos de botón que quiero cerrar la página después de que el usuario ha hecho clic en un botón de ASP.NET en la página. He intentado agregar mediante programación un método JavaScript que contiene un comando window.close() al evento OnClientClick para cerrar la página pero no funciona. El botón también es asp:AsyncPostBoskTrigger para un Panel de actualización de AJAX.

La aplicación utiliza .NET Framework 3.5.

Respuesta

8

ACTUALIZACIÓN: he tomado la totalidad de su entrada y se le ocurrió la siguiente solución:

En código detrás:

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

En la página aspx:

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

hace una devolución de datos, y en el segundo clic, IE pide confirmación para cerrar el navegador. – Bachask8

7

Una devolución de datos es el proceso de volver a cargar una página, por lo que si desea que la página se cierre después de la devolución, debe configurar su JavaScript window.close() para ejecutar con el evento onload del navegador durante esa devolución de datos, normalmente se hace usando la función ClientScript.RegisterStartupScript().

¿Pero está seguro de que esto es lo que quiere hacer? Cerrar páginas tiende a cabrear a los usuarios.

4

Debe insertar una secuencia de comandos de inicio que cerrará la página una vez que haya finalizado la devolución de datos.

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

utilizó esa línea de código a mi página, y se cierra de inmediato. Necesito cerrar la página una vez que el usuario haga clic en el botón de control ASP.NET en la página. –

+0

Ponlo en el controlador de eventos onclick en el código subyacente. – EndangeredMassa

42

Normalmente haría algo como:

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

Sin embargo, tenga en cuenta que diferentes cosas sucederán en diferentes escenarios. Firefox no le permitirá cerrar una ventana que no haya abierto (abierta con window.open()).

IE7 indicará al usuario con un cuadro de diálogo "Esta página está intentando cerrar (Sí | No)".

En cualquier caso, ¡debe estar preparado para lidiar con la ventana que no siempre cierra!

Una solución para el 2 por encima de los problemas es usar:

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

y crear un 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> 

Tenga en cuenta que close.html redireccionará a default.aspx si la ventana no se cierra después de 2 segundos por alguna razón.

2

Puede cerrar una ventana, simplemente pegando el código de cierre de la ventana en caso de OnClientClick el botón en el marcado

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

Para cerrar un asp.uso de las ventanas red,

  • Sólo tienes que arrastrar un botón en la página de diseño
  • luego escribir el código a continuación se indica en el interior de su evento click

     " this.close(); " 
    

es decir:

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

Solo necesita agregar esta propiedad en su asp: Elemento de botón (por ejemplo):

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

Funciona perfectamente.

2

Si usando RadAjaxManager entonces aquí es el código que ayuda a:

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

Corrija el formato de su código. También proporcione texto para explicarlo. – buhtz

Cuestiones relacionadas