【问题标题】:How do you close an ASP.NET MVC page from the controller?如何从控制器关闭 ASP.NET MVC 页面?
【发布时间】:2010-10-25 14:54:32
【问题描述】:

我有一个 ASP.NET MVC 应用程序,它在新的浏览器窗口中打开一个“请求”视图。当用户提交表单时,我希望关闭窗口。保存请求信息后,我的 RequestController 代码在关闭窗口时应该是什么样子?我不确定控制器操作应该返回什么。

【问题讨论】:

    标签: asp.net-mvc model-view-controller


    【解决方案1】:

    您可以返回具有以下 javascript 的视图(或者您可以返回 JavaScript 结果),但我更喜欢前者。

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

    查看关闭:

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

    这是一种直接在控制器中执行此操作的方法,但我建议不要这样做

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

    【讨论】:

    • 好奇:您为什么不建议仅使用控制器解决方案?
    • 您正在通过关闭窗口来操作 UI。似乎不是控制器的责任。
    • 我只是尝试返回 JavaScript,但它不起作用。它只显示“window.close();”屏幕上。我在其他地方读到您应该使用 Ajax 调用此操作,但我无法对其进行测试。只是抬起头来。
    • 您不能使用 window.close() 关闭窗口。你会得到“脚本只能关闭它打开的窗口。”
    【解决方案2】:

    像这样:

    [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>
    <%}%>
    

    【讨论】:

      【解决方案3】:

      听起来您可以返回一个几乎为空的视图模板,该模板只是在标题中包含一些运行“window.close()”的 javascript。

      【讨论】:

        【解决方案4】:

        这对我有用:

        [HttpGet]
        public ActionResult Done()
        {
            return Content(@"<body>
                               <script type='text/javascript'>
                                 window.close();
                               </script>
                             </body> ");
        }
        

        【讨论】:

          【解决方案5】:

          您可以通过此代码关闭:

          return Content(@"<script>window.close();</script>", "text/html");
          

          【讨论】:

            【解决方案6】:

            这对我关闭窗口很有用。

            控制器:

             return PartialView("_LoginSuccessPartial");
            

            查看:

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

            【讨论】:

              【解决方案7】:

              使用它你可以像这样关闭窗口:

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

              【讨论】:

              • 对我来说,这只是将脚本作为字符串返回并显示出来,而不是运行它。
              • return Content("");
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-09-29
              • 2013-12-18
              • 2010-10-11
              • 1970-01-01
              • 1970-01-01
              • 2015-12-28
              • 2011-11-22
              相关资源
              最近更新 更多