如何在一个动作结果中返回两个pdf文件?

时间:2015-10-06 10:45:42

标签: c# asp.net-mvc asp.net-mvc-4 model-view-controller

我需要在MVC中回发两个PDF文件,但操作结果只返回一个文件。还有其他方法可以在动作结果中返回多个文件吗?

return File(stream, "application/pdf", Summary.pdf);

像这样我需要返回多个文件。

2 个答案:

答案 0 :(得分:4)

从控制器中的操作返回的ActionResult始终代表一件事,并且由于HTML中没有多文件引用的概念,您必须执行两个单独的步骤,或将现有操作合并为一个步骤

所以你有三个选择:

  • 创建两个超链接,并调用两个单独的操作。在其中任何一个中生成报告。像现在一样返回FileResult

  • 将您的文件放入zip文件中,并将其发送出去。好消息是你只需要一个动作。不好的是,用户必须先解压缩文件才能查看报告。要使其工作,首先必须生成两个文档,使用library压缩文件,然后使用FileResult或流返回文件。

  • 将两份报告合并为一份。如果这是可行的,则取决于文件是否相关,它们可以被认为是一个。您可以使用library将它们合并在一起并发回合并的报告。

我的赌注是选项1,除非你有充分的理由不这样做。

答案 1 :(得分:0)

如果您使用ajax,您可以创建文件链接并使用json发回链接,然后在javascripts中打开链接。

服务器端:

 ...
    retrun Json(new {.link1 = "stackoverflow.com" , 
                     .link2 = "stackexchange.com"})

和客户方:

$.ajax({
        url: "@Url.Action("ActionName" , "ControllerName")",
        type: "post",
        datatype: "json",
        data: data,
        success: function(sucess) {
            if(success.link1 != undefined)
            {
                  var win = window.open(d.link1 , '_blank');
                  var win1 = window.open(d.link2 , '_blank');
                  if (win==undefined) {
                      //Broswer has blocked it
                      alert(' Activate your browser popup');
                  }
            }
       },
       error: function () { console.log("error"); }
  });