2009-05-12 7 views
18

J'ai une application ASP.NET MVC qui ouvre une vue "Demande" dans une nouvelle fenêtre de navigateur. Lorsque l'utilisateur soumet le formulaire, j'aimerais que la fenêtre se ferme. À quoi devrait ressembler mon code RequestController pour fermer la fenêtre après avoir sauvegardé les informations de la requête? Je ne suis pas sûr de ce que l'action du contrôleur devrait retourner.Comment fermez-vous une page ASP.NET MVC à partir du contrôleur?

Répondre

25

Vous pourriez retourner une vue qui a le javascript suivant (ou vous pouvez retourner un résultat JavaScript) mais je préfère le premier.

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

Voir pour Close:

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

Voici une façon de le faire directement dans votre contrôleur, mais je vous conseille contre

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

curieux: pourquoi vous conseiller contre la solution de contrôleur uniquement? – gfrizzle

+5

Vous manipulez l'interface utilisateur en fermant une fenêtre. Cela ne semble pas être une responsabilité du contrôleur. – womp

+3

J'ai juste essayé de retourner le JavaScript et cela ne fonctionne pas. Il affiche seulement "window.close();" sur l'écran. J'ai lu ailleurs que vous devriez appeler cette action en utilisant Ajax mais je n'ai pas pu le tester. Je donne juste la tête haute. – Aries51

2

On dirait que vous pourriez retourner un presque vide Voir le modèle qui avait simplement du javascript dans l'en-tête qui venait de lancer "window.close()".

3

Comme par exemple:

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

La vue:

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

En utilisant cela, vous pouvez fermer la fenêtre comme ceci:

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

Pour moi, cela vient de retourner le script sous forme de chaîne et l'afficher, pas l'exécuter. –

+4

return Content (""); –

0

Cela a fonctionné pour moi de fermer la fenêtre.

Controller:

return PartialView("_LoginSuccessPartial"); 

Vue:

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