2011-05-27 73 views
3

我有一个实例,而不是我自己的选择,但我在浏览器中有一个辅助弹出窗口。 将表单提交回服务器端MVC方法后,在完成此方法后,我希望它关闭调用它的浏览器窗口。ASP.NET MVC:如何关闭浏览器窗口而不是返回视图?

有没有办法做到这一点,而不是在“onReady”中用JavaScript返回一个视图,告诉它关闭?

回答

7

不,没有办法从服务器实现这一点,而不使用JavaScript(或返回一个视图,将执行此JavaScript)。

5

将这个在您的视图:

@if (ViewBag.ShouldClose) { 
    <script type="text/javascript"> 
     window.close(); 
    </script> 
} 

然后,如果你设置ShouldClose属性,它会运行该脚本,并应关闭该窗口。

// in your controller 
ViewBag.ShouldClose = true; 

注意:我在编辑器中这样做了,所以您可能需要调整视图语法以使其解析正确。

+0

唯一的问题是,我没有运行最新的MVC,所以我不能使用@语法。尽管如此,我只是让它与古老的<%%>一起工作。 ;) 谢谢。 – 2011-05-27 15:44:57

+0

好的废话...看起来像viewbag并没有加入,直到MVC 3以及。无论哪种方式,我知道如何在客户端处理它。我只是好奇,如果我可以将它扼杀在服务器端的萌芽。 thx虽然。 – 2011-05-27 15:46:46

+0

当然。 ViewData [“ShouldClose”]双方应该工作,我认为。 – 2011-05-27 15:53:51

2

我有同样的问题,@迈克尔肯尼迪的答案正是我所需要的!由于我使用MVC 2,我不得不改变语法。我会把它放在这里作为其他人的参考。

在视图:

<% if ((bool)ViewData["ShouldClose"]) { %> 
<script type="text/javascript"> 
    window.close(); 
</script> 
<% } %> 

在控制器:

ViewData["ShouldClose"] = true; 

不要忘记设置的ViewData在每次调用视图,否则你会得到用于浇铸的NullReference布尔。