2012-04-06 79 views
1

我想給出選項上傳多個文件,然後下載它。我創建的鏈接按鈕動態,如:點擊事件動態創建的鏈接按鈕不起作用

private void AddLinkButtons() 
{ 
    string[] fileNames = (string[])Session["fileNames"]; 
    string[] fileUrls = (string[])Session["fileUrls"]; 
    if (fileNames != null) 
    { 
     for (int i = 0; i < fileUrls.Length - 1; i++) 
     { 
      LinkButton lb = new LinkButton(); 

      phLinkButtons.Controls.Add(lb); 
      lb.Text = fileNames[i]; 
      lb.CommandName = "url"; 
      lb.CommandArgument = fileUrls[i]; 
      lb.ID = "lbFile" + i; 

      //lb.Click +=this.DownloadFile; 
      lb.Attributes.Add("runat", "server"); 
      lb.Click += new EventHandler(this.DownloadFile); 
      ////lb.Command += new CommandEventHandler(DownloadFile); 

      phLinkButtons.Controls.Add(lb); 
      phLinkButtons.Controls.Add(new LiteralControl("<br>")); 

     } 
    } 

而且我DownloadFile事件是:

protected void DownloadFile(object sender, EventArgs e) 
{ 
    LinkButton lb = (LinkButton)sender; 
    string url = lb.CommandArgument; 

    System.IO.FileInfo file = new System.IO.FileInfo(url); 
    if (file.Exists) 
    { 
     try 
     { 
      Response.Clear(); 
      Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name); 
      Response.AddHeader("Content-Length", file.Length.ToString()); 
      Response.ContentType = "application/octet-stream"; 
      Response.WriteFile(file.FullName); 
      Response.End(); 
     } 
     catch (Exception ex) 
     { 

     } 
    } 
    else 
    { 
     Response.Write("This file does not exist."); 
    } 
} 

我收到鏈接按鈕在屏幕上但點擊後DownloadFile事件不會被調用。我嘗試了所有被評論的選項,但它不起作用。代碼有什麼問題?

+1

有什麼問題嗎? 'LinkBut​​ton lb = new LinkBut​​ton();磅=(LinkBut​​ton)lbTest;' – Steve 2012-04-06 10:16:45

+0

這是錯誤的...我刪除它,仍然無法正常工作。 – user1181942 2012-04-06 10:25:32

+0

什麼是phLinkBut​​tons? – 2012-04-06 10:27:08

回答

3

在哪裏,是AddLinkBut​​tons時()呼籲希望?

它應該在頁面初始化過程中,每次回發時調用。

根據您的頁面的邏輯,你的OnInit應該是這樣的

protected override void OnInit(EventArgs e) 
    { 
     base.OnInit(e); 
     AddLinkButtons(); 

    } 
+0

@ jbl ..謝謝..這對我來說很有效,我沒有在每一個回傳中調用AddLinkBut​​tons()。 – user1181942 2012-04-09 04:27:30

1

代碼似乎很好..

不明白什麼是AddLinkBut​​tons lbTest()方法。

請從AddLinkBut​​tons()方法中刪除此行。

lb = (LinkButton)lbTest; 

,將作品......

+0

我刪除了它...仍然無法正常工作 – user1181942 2012-04-06 10:26:32

0

添加鏈接按鈕,其屬性已設置之後。你的代碼中加入2個按鈕

 phLinkButtons.Controls.Add(lb); //------1 
     lb.Text = fileNames[i]; 
     lb.CommandName = "url"; 
     lb.CommandArgument = fileUrls[i]; 
     lb.ID = "lbFile" + i; 

     //lb.Click +=this.DownloadFile; 
     lb.Attributes.Add("runat", "server"); 
     lb.Click += new EventHandler(this.DownloadFile); 
     ////lb.Command += new CommandEventHandler(DownloadFile); 

     phLinkButtons.Controls.Add(lb); //-------------------2 

刪除第一行