所以我有GridView
LinkButton
。 GridView
有一些文件从目录中提取并显示给最终用户。每个文件都有自己的描述。每个文件还有一个下载按钮,如果单击该文件将下载。我正在传递CommandArgument
如下
CommandArgument='<%# Eval("FileName") %>'
问题是当我点击下载按钮时出现错误Could not find file
。路径应为C:\\Documents\\Test\\someFile.pdf
,而我的路径为C:\\Documents\\someFile.pdf
有谁知道我哪里出错了?
其余代码位于
之下 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="FileName" HeaderText="File Name" />
<asp:BoundField DataField="FileDescription" HeaderText="Description" />
<asp:TemplateField HeaderText="View Details">
<ItemTemplate>
<asp:LinkButton ID="lnkDownload" Text="Download" Font-Bold="true" CommandArgument='<%# Eval("FileName") %>' runat="server" OnClick="DownloadFile"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
string[] filePaths = Directory.GetFiles(Server.MapPath("~/Test/"));
List<FileDetails> files = new List<FileDetails>();
foreach (string filePath in filePaths)
{
string filename = Path.GetFileName(filePath);
files.Add(new FileDetails()
{
FileName = filename,
FileDescription = "This is a test file"
});
}
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.ContentType = "application/pdf";
Response.WriteFile(filePath);
Response.End();
}
我的FileDetails
课程有get
和set
两个属性。在此先感谢您的帮助。
答案 0 :(得分:2)
问题是您正在使用
string filename = Path.GetFileName(filePath);
为您要添加的每个文件。
您将要添加&#34; something.pdf&#34;列表。
点击下载按钮会发生什么,它会尝试获取&#34; something.pdf&#34;从相对路径。在这种情况下,没有&#34; / test /&#34;文件夹中。
您可以做的是更改以下代码
string filename = Path.GetFileName(filePath);
files.Add(new FileDetails()
{
FileName = filename,
FileDescription = "This is a test file"
});
到
string filename = Path.GetFileName(filePath);
files.Add(new FileDetails()
{
FileName = filename,
FullPath = filePath,
FileDescription = "This is a test file"
});
然后添加
public string FullPath {get;set;}
在FileDetails类中。
最后,更新您的aspx,使命令看起来像
CommandArgument='<%# Eval("FullPath") %>'
瞧!
现在应该可以使用: - )