我有以下问题: 我有一个MVC应用程序,在某些控制器的某些操作中,我正在生成PDF文件,该文件是在服务器上的特定路径上生成的。该操作正在视图的操作链接上调用,当用户单击该链接时,该操作生成该PDF,一切正常,直到此处。 我希望页面显示包含我生成的PDF文件的对话框:
打开 - 保存 - 取消(单击文件时的典型文件对话框)
但是,如果不刷新页面,则只在用户点击链接时显示对话框。
我怎么能这样做?该动作应该返回视图? 感谢。
答案 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;
}