【问题标题】:How to prompt to open, save or cancel a pdf file in asp.net c#如何在asp.net c#中提示打开、保存或取消pdf文件
【发布时间】:2015-11-09 00:18:06
【问题描述】:

我有一组存储在 sql 数据库中的 pdf 文件。我将 2 个关键信息(ReportIdent 和 Date)下载到 gridview 中。 我使用唯一的 ReportIdent 作为链接来选择和打开 pdf 文件。
当用户单击 ReportIdent 时,我希望提示打开、保存或取消 pdf 文件。 当我运行此代码时,它会下载 pdf 文件,而不会提示我打开、保存或取消选项。我已经搜索并尝试了不同的方法,但我仍然没有得到提示。

这是我显示 pdf 报告的代码:

string query = "select * from dbo.MonthlyReportPDF where ReportIdent    = '"+id+"'";
SqlCommand queryCommand = new SqlCommand(query, RptConn);
SqlDataReader queryCommandReader = queryCommand.ExecuteReader();
DataTable dataTable = new DataTable();
dataTable.Load(queryCommandReader);

string myRpt = dataTable.Rows[0]["ReportIdent"].ToString();
byte[] documentBytes = (byte[])dataTable.Rows[0]["DocFile"];

if (documentBytes != null)
{
Response.ClearContent();
Response.ClearHeaders();
Response.Buffer = true;
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Dispositon", "attachment; filename=" + myRpt);
Response.AddHeader("Content-Length", documentBytes.Length.ToString());
Response.BinaryWrite(documentBytes);

Response.End();
Response.Flush();
Response.Close();
}
else
{
LblError.Visible = true;
LblError.Text = Report ID "+ myRpt + "not found.";            
}

这是我的 Default.aspx 代码:

<asp:GridView ID="gvMonthlyRpt" runat="server" AutoGenerateColumns="False" DataKeyNames="ReportIdent">
<Columns>
<asp:TemplateField HeaderText="Report ID">
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server"
OnClick="ShowReport"
Text='<%# Eval("ReportIdent") %>'></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Report Date">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval"RptDate">'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>

【问题讨论】:

    标签: c# asp.net pdf


    【解决方案1】:

    您正确发送了Content-Disposition 标头,因此问题不在您这边。浏览器可能配置为直接保存,而不是提示用户。当然,您的应用无法更改浏览器的配置...

    【讨论】:

    • 我的错。我错过了“处置”一词中的字母“i”。一旦我更正了拼写,它现在会提示我打开、保存和取消选项。很抱歉打扰你们。但是我确实有一个问题:我是否需要添加“Content-Length”标头?
    • @esant,不是强制的,但是可以让客户端知道有多少数据要下载,所以可以显示下载进度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    • 2018-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    相关资源
    最近更新 更多