1

これは簡単だと思いましたが、リンクボタンがあり、クリックイベントでこれを行います。

myContainer.Controls.Add( new FileUpload());

クリックごとに1つの新しいファイルコントロールアップロードがコンテナに生成されると予想しますが、常に1を取得します。複数のファイルアップロードコントロールを作成するには、何をする必要がありますか?

4

2 に答える 2

2

コントロールは動的に追加されたため、ポストバック後は存続しません。これは、ファイルのアップロード (またはその他の動的に追加されたコントロール) を preinit イベントに再度追加して、その値を設定し、後でページのライフ サイクルで使用できるようにする必要があることを意味します。

複数のファイルをアップロードできるようにしようとしているようです。ファイルのアップロードを jQuery で追加し、Request.Files プロパティを使用してバックエンドで取得することができます。

于 2011-09-30T20:23:22.077 に答える
1

Becuzzの答えに同意します。これを試してみてください。より良い方法がありますが、これも役立つ場合があります。

これをページの「Load」イベントに追加します

if (!IsPostBack) {
    Session["UploadControls"] = null;
}

if (Session["UploadControls"] != null) {
    if (((List<Control>)Session["UploadControls"]).Count > 0) {
        foreach ( ctrl in (List<Control>)Session["UploadControls"]) {
            files.Controls.Add(ctrl);
        }
    }
}

また、これをページの PreInit 部分に追加します。

string ButtonID = Request.Form("__EVENTTARGET");
if (ButtonID == "Button1") {
    FileUpload NewlyAdded = new FileUpload();

    List<Control> allControls = new List<Control>();

    if (Session["UploadControls"] != null) {
        if (((List<Control>)Session["UploadControls"]).Count > 0) {
            foreach ( ctrl in (List<Control>)Session["UploadControls"]) {
                allControls.Add(ctrl);
                //Add existing controls
            }
        }
    }

    if (!allControls.Contains(NewlyAdded)) {
        allControls.Add(NewlyAdded);
    }

    Session["UploadControls"] = allControls;
}

これを HTML に追加します。もちろん、これは何でもかまいません:

<div id="files" runat="server">

</div>

「__EVENTTARGET」値を使用してポストバックの原因を把握し、不要なアップロード コントロールを取得しないようにします。

うまくいけば、これが役立つことを願っています。

ハンレット

于 2011-09-30T21:23:01.100 に答える