使用“导出”导出/下载ReportViewer报告;另存为..“;对话框,或在新的选项卡或窗口中打开

本文关键字:导出 选项 窗口 对话框 下载 ReportViewer 报告 使用 另存为 | 更新日期: 2023-09-27 18:30:01

我能够使用以下代码成功地将报告从报告查看器导出到PDF文件:

private void ExportReport(string exportType)
{
    if (ReportViewerControl.LocalReport.ReportPath == null)
    {
        LiteralReportErrorMessage.Text = "Please select a report to view before exporting.";
        return;
    }
    Warning[] warnings;
    string[] streamIds;
    string mimeType = string.Empty;
    string encoding = string.Empty;
    string extension = string.Empty;
    string filename = "RSLF";
    byte[] bytes = ReportViewerControl.LocalReport.Render(exportType, null, out mimeType, out encoding, out extension, out streamIds, out warnings);
    Response.Buffer = true;
    Response.Clear();
    Response.ContentType = mimeType;
    Response.AddHeader("content-dispostion", "attachment; filename=" + filename + "." + extension);
    Response.BinaryWrite(bytes);
    Response.Flush();
}

我遇到的问题是,这个方法是从按钮单击事件处理程序调用的。处理程序只调用此方法,然后返回。报告导出很好,但PDF在浏览器中打开的选项卡与原始页面所在的选项卡相同,而不是提示用户"另存为…"对话框(我真的更喜欢)。当用户单击"上一步"按钮时,所有报告设置都将丢失,需要重新输入。

我不在乎报告是否在浏览器中打开,但是否可以强制它在新的选项卡或窗口中打开?更好的是,我是否可以更改上面的方法,提示用户保存文件,而不是在浏览器中显示它?

使用“导出”导出/下载ReportViewer报告;另存为..“;对话框,或在新的选项卡或窗口中打开

我真的发现了我的问题。。。我拼错了"内容处置"。将其从"内容处置"更改为"内容处置(contentdisposition)"起到了作用。真傻!

只需尝试在Response中使用Clear方法擦除任何缓冲的HTML输出即可。此代码应提示"另存为"对话框。

Response.Clear();
Response.ClearHeaders();
Response.ContentType = mimeType;
Response.AppendHeader("content-disposition", "attachment; filename=" + filename + "." + extension);
Response.BinaryWrite(bytes);
Response.Flush();
Response.SuppressContent = true;
HttpContext.Current.ApplicationInstance.CompleteRequest();