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
È 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();");
}
Sembra che si potrebbe restituire un quasi vuoto Visualizza il modello che aveva semplicemente qualche javascript nell'intestazione che ha appena eseguito "window.close()".
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>
<%}%>
Usando questo è possibile chiudere la finestra come questa:
return Content("<script language='javascript'>window.close();</script>");
Per me, questo ha appena restituito lo script come stringa e visualizzato, non eseguito. –
ritorno Content ("
questo ha lavorato per me per chiudere la finestra.
Controller:
return PartialView("_LoginSuccessPartial");
Vista:
<script>
var loginwindow = $("#loginWindow").data("kendoWindow");
loginwindow.close();
</script>
curioso: perché si dovrebbe sconsigliare la soluzione di controllo di sola? – gfrizzle
Stai manipolando l'interfaccia utente chiudendo una finestra. Non sembra una responsabilità del controller. – womp
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