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イベントが呼び出されることはありません。コメントされているすべてのオプションを試しましたが、機能しません。コードの何が問題になっていますか?

4

3 に答える 3

3

AddLinkBut​​tons() はいつどこで呼び出されますか?

各ポストバックで、ページの初期化中に呼び出す必要があります。

ページのロジックに応じて、OnInit は次のようになります。

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

    }
于 2012-04-06T12:05:54.693 に答える
1

コードは問題ないようです..

AddLinkBut​​tons() メソッドの lbTest とは何かを理解していません。

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

lb = (LinkButton)lbTest;

それがうまくいくことを願っています...

于 2012-04-06T10:22:49.210 に答える
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

最初の行を削除

于 2012-04-09T03:58:31.307 に答える