首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >可选地在控制器操作中打开一个新窗口

可选地在控制器操作中打开一个新窗口
EN

Stack Overflow用户
提问于 2011-03-23 13:07:14
回答 1查看 2.5K关注 0票数 0

在一个ASP.Net MVC 2应用程序中,我想做以下工作:在处理表单post的操作中,我想:

  • 将用户重定向到当前浏览器窗口中的其他视图
  • 打开一个新窗口,显示其他信息(其他视图)

可以轻松地在form元素中设置target="_blank"属性并添加以下jQuery脚本:

代码语言:javascript
运行
复制
$(function () {
    $("form").submit(function () {
        window.location = "...";
    });
});

操作处理程序返回的视图将在表单发布到的新窗口中呈现。

但是,让我们让它变得更棘手:

如果在执行操作时没有服务层错误,则执行上述操作。如果执行操作时有任何服务层错误,则不要打开新窗口,操作返回的视图必须显示在表单所在的同一窗口中。。

例如:假设服务层生成一个pdfDocument来显示给用户,如果一切正常,那么这个pdf必须显示在一个新的窗口中。

代码语言:javascript
运行
复制
[HttpPost]
public ActionResult SomeAction(FormCollection form)
{
    var serviceMethodParams = ... // convertion from the form data somehow

    MemoryStream pdfDocument = null;

    if (!serviceLayer.DoSomething(serviceMethodParams, out pdfDocument))
    {
        // Something went wrong, do not redirect, do not open new window
        // Return the same view where error should be displayed
        return View(...);
    }

    // The service method run ok, this must be shown in a new window and the origal window must be redirected somewhere else
    return File(pdfDocument.ToArray(), "application/pdf");
}

注意,当服务返回true时,原始解决方案工作得很好,但是如果服务返回false,则显示错误的视图将显示在一个新窗口中,而原始窗口将被重定向到其他地方。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-23 13:12:09

在这种情况下,更好的选择是返回特定于该文档的URL,供用户指向,如果ajax调用成功,将从操作方法返回URL,然后打开指向该URL的新窗口。如果出现错误,您可以显示错误或类似的错误--基本上,数据是折叠在Json返回值中的。

在ajax调用之外,对我来说最可接受的模式是让视图重新呈现,然后附加一些启动javascript来打开指向特定URL的新窗口。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5405682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档