2014-11-25 69 views
0

所以我有一個GridViewLinkButtonGridView有一些文件正從目錄中提取並顯示給最終用戶。每個文件都有它自己的描述。每個文件也有一個下載按鈕,如果點擊該文件將下載。我傳遞了CommandArgument如下LinkBut​​ton沒有發送正確的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兩個屬性。在此先感謝您的幫助。

回答

2

的問題是,你使用

string filename = Path.GetFileName(filePath); 

您要添加的每個文件。

會發生什麼是你要添加「something.pdf」到列表中。

當您點擊下載按鈕時會發生什麼,它會嘗試從相對路徑中獲取「something.pdf」。在這種情況下,沒有「/ test /」文件夾。

你可以做的是更改下面的代碼

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

瞧!

現在應該工作:-)

+0

你是一個生命的救星!謝謝 – Code 2014-11-25 15:18:01

相關問題