【问题标题】:MVC open pdf fileMVC打开pdf文件
【发布时间】:2009-12-10 14:13:26
【问题描述】:

我有以下问题: 我有一个 MVC 应用程序,在某些控制器的某些操作中,我正在生成一个 PDF 文件,该文件是在服务器上的特定路径上生成的。该操作正在视图的操作链接上调用,当用户单击该链接时,该操作生成该 PDF,直到这里一切正常。 我希望页面显示带有我生成的 PDF 文件的对话框:

打开 - 保存 - 取消(单击文件时的典型文件对话框)

但不刷新页面,只在用户点击链接时显示对话框。

我怎么能这样做?什么动作应该返回视图? 谢谢。

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      要提供打开 - 保存 - 取消对话框,您需要设置适当的响应标头,并如 @RichardOD 所说,返回 FilePathResult 或 FileStreamResult。

      HttpContext.Response.AddHeader("content-disposition", "attachment; 
                                     filename=form.pdf");
      
      return new FileStreamResult(fileStream, "application/pdf");
      

      【讨论】:

      • FileStreamResultFilePathResult 都有一个属性 FileDownloadName,您应该使用它而不是手动设置 "content-disposition" 标头。
      【解决方案3】:

      试试这样的

       public class PdfResult : ActionResult
          {
              //private members
              public PdfResult(/*prams you need to generate that pdf*/)
              public override void ExecuteResult(ControllerContext context) 
              {
                  //create the pdf in a byte array then drop it into the response
                  context.HttpContext.Response.Clear();
                  context.HttpContext.Response.ContentType = "application/pdf";
                  context.HttpContext.Response.AddHeader("content-disposition", "attachment;filename=xxx.pdf");
                  context.HttpContext.Response.OutputStream.Write(pdfBytes.ToArray(), 0, pdfBytes.ToArray().Length);
                  context.HttpContext.Response.End();
              }
          }
      

      然后你只返回一个 PdfResult

      提示:我有一个通用类来执行此操作,它是这样的,我正在使用 NFop

       public PdfResult(IQueryable source, Dictionary<string,int> columns, Type type)
          {
              Source = source;
              Columns = columns;
              SourceType = type;
          }
      

      【讨论】:

        猜你喜欢
        • 2014-03-10
        • 1970-01-01
        • 2013-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-04
        • 1970-01-01
        相关资源
        最近更新 更多