MVC打开pdf文件

时间:2009-12-10 14:13:27

标签: asp.net-mvc

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

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

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

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

3 个答案:

答案 0 :(得分:4)

答案 1 :(得分:3)

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

HttpContext.Response.AddHeader("content-disposition", "attachment; 
                               filename=form.pdf");

return new FileStreamResult(fileStream, "application/pdf");

答案 2 :(得分:0)

尝试这样的事情

 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;
    }