如何使下载图像链接工作?
问题描述:
我有我的viewdepositslip.aspx这个代码,其中它显示了从所在的文件夹上传的文件都存储在imageurls:如何使下载图像链接工作?
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" EmptyDataText = "No files uploaded">
<Columns>
<asp:BoundField DataField="Text" HeaderText="File Name" />
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="lnkDownload" Text = "Download" CommandArgument = '<%# Eval("Value") %>' runat="server" OnClick = "DownloadFile"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID = "lnkDelete" Text = "Delete" CommandArgument = '<%# Eval("Value") %>' runat = "server" OnClick = "DeleteFile" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
这是我的图片上传到文件夹代码(此来自客户端,不同的webform)。
protected void UploadFile(object sender, EventArgs e)
{
string fileName = Path.GetFileName(FileUpload1.PostedFile.FileName);
FileUpload1.PostedFile.SaveAs(Server.MapPath("~/Uploads/") + fileName);
Response.Redirect(Request.Url.AbsoluteUri);
}
这是后面的代码。那么删除按钮功能完美,但我不能使下载链接功能的工作。我在这里错过了什么?
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string[] filePaths = Directory.GetFiles(Server.MapPath("~/BankDepositUploads/"));
List<ListItem> files = new List<ListItem>();
foreach (string filePath in filePaths)
{
files.Add(new ListItem(Path.GetFileName(filePath), filePath));
}
GridView1.DataSource = files;
GridView1.DataBind();
}
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();
}
protected void DeleteFile(object sender, EventArgs e)
{
string filePath = (sender as LinkButton).CommandArgument;
File.Delete(filePath);
Response.Redirect(Request.Url.AbsoluteUri);
}
此外,我打算看到一旦它显示在gridview中的实际图像。截至目前它有图像网址。
答
你的代码也应该工作,但出于某种原因它可能不工作,所以尝试像这样:
aspx页面
<asp:LinkButton ID="lnkDownload" runat="server" CommandName="cmd">Download</asp:LinkButton>
CS页
protected void GridView1_RowCommand(object sender, System.Web.UI.WebControls.GridViewCommandEventArgs e)
{
if (e.CommandName == "cmd")
{
string filePath = (sender as LinkButton).CommandArgument;
Response.ContentType = ContentType;
Response.AppendHeader("Content-Disposition", "attachment; filename=" + Path.GetFileName(filePath));
Response.WriteFile(filePath);
Response.End();
}
}
编辑: - 由于您正在使用更新面板,因此您在点击链接按钮时有回传功能。有很多方法可以做到这一点。我正在解释两种方式。 将这个代码在页面加载
ScriptManager.GetCurrent(this).RegisterPostBackControl(this.GridView1);
或者,您在使用更新面板在aspx页面使用触发器,下面</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="GridView1" />
</Triggers>
+0
后检查答案我使用第一种方式,你给。你是一个传奇!谢谢!! @Litisqe库马尔 –
? –
no sir。 @Ganesh_Devlekar –
所以代码永远达不到DownloadFile函数? –