2009-05-12 33 views
18

Ho un'app ASP.NET MVC che apre una vista "Richiesta" in una nuova finestra del browser. Quando l'utente invia il modulo, vorrei che la finestra si chiudesse. Come dovrebbe apparire il mio codice RequestController per chiudere la finestra dopo aver salvato le informazioni sulla richiesta? Non sono sicuro di cosa debba essere restituito l'azione del controller.Come si chiude una pagina MVC ASP.NET dal controller?

risposta

25

È possibile restituire una vista con il seguente javascript (oppure è possibile restituire un risultato JavaScript) ma preferisco la prima.

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

View per chiudere:

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

Ecco un modo per farlo direttamente nel vostro controller, ma vi consiglio contro di essa

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

curioso: perché si dovrebbe sconsigliare la soluzione di controllo di sola? – gfrizzle

+5

Stai manipolando l'interfaccia utente chiudendo una finestra. Non sembra una responsabilità del controller. – womp

+3

Ho appena provato a restituire il codice JavaScript e non funziona. Visualizza solo "window.close();" sullo schermo. Ho letto da qualche altra parte che dovresti chiamare questa azione usando Ajax ma non sono stato in grado di testarlo. Sto solo dando l'idea. – Aries51

2

Sembra che si potrebbe restituire un quasi vuoto Visualizza il modello che aveva semplicemente qualche javascript nell'intestazione che ha appena eseguito "window.close()".

3

Come ad esempio:

[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

Usando questo è possibile chiudere la finestra come questa:

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

Per me, questo ha appena restituito lo script come stringa e visualizzato, non eseguito. –

+4

ritorno Content (" window.close();"); –

0

questo ha lavorato per me per chiudere la finestra.

Controller:

return PartialView("_LoginSuccessPartial"); 

Vista:

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