2009-05-12 11 views
18

Tengo una aplicación ASP.NET MVC que abre una vista de "Solicitud" en una nueva ventana del navegador. Cuando el usuario envía el formulario, me gustaría que se cierre la ventana. ¿Cómo debería ser mi código RequestController para cerrar la ventana después de guardar la información de la solicitud? No estoy seguro de qué debería devolver la acción del controlador.¿Cómo cierras una página ASP.NET MVC desde el controlador?

Respuesta

25

Puede devolver una Vista que tenga el siguiente javascript (o podría devolver un resultado de JavaScript) pero yo prefiero la anterior.

public ActionResult SubmitForm() 
{ 
    return View("Close"); 
} 

Ver para Close:

<body> 
    <script type="text/javascript"> 
     window.close(); 
    </script> 
</body> 

Aquí es una manera de hacerlo directamente en el controlador pero desaconsejarla

public ActionResult SubmitForm() 
{ 
    return JavaScript("window.close();"); 
} 
+1

curioso: ¿por qué le aconsejaría en contra de la solución de controlador de sólo? – gfrizzle

+5

Está manipulando la interfaz de usuario al cerrar una ventana. No parece ser una responsabilidad del controlador. – womp

+3

Intenté devolver el JavaScript y no funciona. Solo muestra "window.close();" en la pantalla. Leí en otro lado que deberías llamar a esta acción usando Ajax pero no he podido probarlo. Solo dando la noticia. – Aries51

2

Parece que podría devolver un casi vacío Ver la plantilla que simplemente tenía algo de javascript en el encabezado que acaba de ejecutar "window.close()".

3

Como ejemplo:

[HttpPost] 
public ActionResult MyController(Model model) 
{ 
    //do stuff 
    ViewBag.Processed = true; 
    return View(); 
} 

La vista:

<%if(null!=ViewBag.Processed && (bool)ViewBag.Processed == true){%> 
<script> 
    window.close(); 
</script> 
<%}%> 
-1

El uso de este puede cerrar la ventana como esta:

return Content("&lt;script language='javascript'>window.close();&lt;/script>"); 
+0

Para mí, esto acaba de devolver el script como una cadena y lo muestra, no ejecutarlo. –

+4

return Content (""); –

0

Esto funcionó para mí para cerrar la ventana.

controlador:

return PartialView("_LoginSuccessPartial"); 

Vista:

<script> 
    var loginwindow = $("#loginWindow").data("kendoWindow"); 
    loginwindow.close(); 
</script> 
Cuestiones relacionadas