2012-04-06 28 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 =新しいLinkBut​​ton(); lb =(LinkBut​​ton)lbTest; ' – Steve

+0

それは間違っていた...私はそれを削除し、まだ動作しません。 – user1181942

+0

phLinkBut​​tonsとは何ですか? –

答えて

3

とと呼ばれます

lb = (LinkButton)lbTest; 

希望?

ページのinit、各ポストバック時に呼び出される必要があります。

ページのロジックに応じて、あなたのOnInitは、そのプロパティを設定した後にリンクボタンを追加し、この

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

    } 
+0

@ jbl..Thanks ..これは私のために働いた、私はすべてのポストバックでAddLinkBut​​tons()を呼び出すことはなかった.. – user1181942

1

コードは罰金だ。..

はAddLinkBut​​tonsでlbTestであるかを理解()メソッドいけません。

AddLinkBut​​tons()メソッドからこの行を削除してください。 AddLinkBut​​tonsのときの作品が...()

+0

私はそれを削除しました...まだ動作していません – user1181942

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 

がここ

関連する問題