Как загрузить файл PDF, созданный с учетом пути к файлу в Gridview?
Я хочу написать код, позволяющий пользователю загружать PDF, нажав кнопку ссылки "Загрузить" в Gridview, когда путь к файлу указан в Gridview.
Вот мой код:
ASPX
<asp:GridView ID="Gridview1" runat="server" ShowHeaderWhenEmpty="true"
EmptyDataText="No Records Found" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="None" AutoGenerateSelectButton="true" Font-Size="Small" Width="95%" onselectedindexchanged="Gridview1_SelectedIndexChanged">
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:BoundField HeaderText="ID" DataField="id" DataFormatString="BSc/{0}" />
<asp:BoundField HeaderText="Company Name" DataField="ComName" />
<asp:BoundField HeaderText="Country Incorperated" DataField="Country" />
<asp:BoundField HeaderText="Date Created" DataField="Date" />
<asp:BoundField HeaderText="Path" DataField="Path" />
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="lnkDownload" Text = "Download" CommandArgument = '<%# Eval("Path") %>' runat="server" OnClick = "DownloadFile"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<EditRowStyle BackColor="#2461BF" />
<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
<RowStyle BackColor="#EFF3FB" />
<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
<SortedAscendingCellStyle BackColor="#F5F7FB" />
<SortedAscendingHeaderStyle BackColor="#6D95E1" />
<SortedDescendingCellStyle BackColor="#E9EBEF" />
<SortedDescendingHeaderStyle BackColor="#4870BE" />
</asp:GridView>
aspx.cs
protected void DownloadFile(object sender, EventArgs e)
{
string filePath = (sender as LinkButton).CommandArgument;
Response.ContentType = ContentType;
Response.AppendHeader("Content-Disposition", "attachment; filename=" + Path.GetFileName(filePath));
Response.WriteFile(filePath);
Response.End();
}
Я посмотрел код загрузки с этого сайта: http://www.aspsnippets.com/Articles/Download-Files-from-GridView-using-LinkButton-Click-Event-in-ASPNet-using-C-and-VBNet.aspx
Я также получаю путь к файлу, как я должен, но после этого ничего не происходит. Там также нет ошибки.
Пожалуйста помоги. Заранее спасибо.
1 ответ
Response.WriteFile
старый метод, который использовался в ASP.NET 1.1 Попробуйте этот код для скачивания.
// Clear the content of the response
Response.ClearContent();
// Add the file name and attachment, which will force the open/cance/save dialog to show, to the header
Response.AppendHeader("Content-Disposition", "attachment; filename=" + Path.GetFileName(filePath));
// Add the file size into the response header
Response.AddHeader("Content-Length", filePath.Length.ToString());
// Set the ContentType
Response.ContentType = "application/pdf";
// Write the file into the response (TransmitFile is for ASP.NET 2.0 and above. In ASP.NET 1.1 you have to use WriteFile instead)
Response.TransmitFile(filePath);
Response.Flush();
// End the response
Response.End();
Кроме того, наличие сетки на панели обновлений может вызвать проблемы при попытке загрузки из элемента управления в самой сетке, поскольку загрузка требует полной обратной отправки. В этом случае рассмотрите возможность использования PostBackTrigger.