LinkBut​​ton没有向后面的代码发送正确的CommandArgument

时间:2014-11-25 14:55:18

标签: c# asp.net gridview

所以我有GridView LinkButtonGridView有一些文件从目录中提取并显示给最终用户。每个文件都有自己的描述。每个文件还有一个下载按钮,如果单击该文件将下载。我正在传递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课程有getset两个属性。在此先感谢您的帮助。

1 个答案:

答案 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") %>'

瞧!

现在应该可以使用: - )