我有一组存储在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>
答案 0 :(得分:0)
您正确发送了Content-Disposition
标题,因此问题不在您的身边。浏览器可能配置为直接保存,而不是提示用户。当然,您的应用无法更改浏览器的配置......