2009-05-12 3 views
18

У меня есть приложение ASP.NET MVC, которое открывает представление «Запрос» в новом окне браузера. Когда пользователь отправляет форму, я хотел бы закрыть окно. Каким должен быть мой код RequestController закрыть окно после сохранения информации о запросе? Я не уверен, что действие контроллера должно быть возвращено.Как закрыть страницу ASP.NET MVC с контроллера?

ответ

25

Вы можете вернуть представление, которое имеет следующий javascript (или вы можете вернуть результат JavaScript), но я предпочитаю первый.

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

Вид на Close:

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

Вот способ сделать это непосредственно в контроллер, но я советую против

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

Любопытно: почему бы вы посоветовали против контроллера только решение? – gfrizzle

+5

Вы управляете пользовательским интерфейсом, закрывая окно. Не похоже на ответственность диспетчера. – womp

+3

Я просто попытался вернуть JavaScript, и он не работает. Он отображает только «window.close();» на экране. Я читал где-то еще, что вы должны вызвать это действие с помощью Ajax, но я не смог его протестировать. Просто хватая головы. – Aries51

2

Это звучит, как вы могли бы вернуться почти пуст Просмотрите шаблон, который просто имел некоторый javascript в заголовке, который только что запустил «window.close()».

3

Как например:

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

Вид:

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

С помощью этого вы можете закрыть окно, как это:

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

Для меня это просто вернуло скрипт как строку и отобразило его, а не запустило. –

+4

return Content (""); –

0

Это работает для меня, чтобы закрыть окно.

Контроллер:

return PartialView("_LoginSuccessPartial"); 

Вид:

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