第二次提交HTTP表单而不取消第一次提交

时间:2015-10-26 18:43:13

标签: jquery asp.net-mvc

我正在调用MVC ActionResult来生成.ZIP报告。此ActionResult使用[HttpPost]进行修饰,并将FilePathResult.Controller.File对象返回给客户端。

就其本身而言,.ZIP实现工作正常,但我现在需要发送第二个独立文件,该文件不能包含在第一个.ZIP中。

.ZIP文件由客户端浏览器始终下载。第二个文件是PDF,有条件地下载。

独立地,我的编码工作得很好,但由于我的第二个HTTP POST似乎取消了第一个,因此它们无法一起工作。

jQuery:

$('#btnDownloadReports li a').click(function (event) {

    event.preventDefault;

    $(this).parents("form")
        .attr("method", "POST")
        .attr("action", "/MyController/MyOutputZIP/?selectionId=" + $('#SelectionId').val())
        .submit();

    if ($(this).data('reporttype') == 'pdf') {
        $(this).parents("form")
            .attr("method", "POST")
            .attr("action", "/MyController/MyOutputPDF/?selectionId=" + $('#SelectionId').val())
            .submit();
    }

    return false;
}

我看到可能提供提示的SO post,但我不确定如何应用它。

在第一次HTTP POST完成后,有人能指出如何进行第二次HTTP POST触发吗?

2 个答案:

答案 0 :(得分:2)

为什么不在服务器端移动逻辑,让它决定发送给你的文件数量和数量,而不是什么本质上是黑客攻击?考虑到客户端的任何内容都可能被恶意更改。

在服务器端,您有两种不同的选择:

  • 多部分文档,只需在同一个流中返回两个文件即可。
  • 去老派,如果需要,只需将文档压缩在一起(否则只返回一个解压缩的文档)。

答案 1 :(得分:0)

我前段时间做过类似的事情。我的解决方案是使用javascript打开一个新窗口以下载其他文件。

最终用户必须“批准”网站以打开新窗口,这应该只是一次......