これは簡単だと思いましたが、リンクボタンがあり、クリックイベントでこれを行います。
myContainer.Controls.Add( new FileUpload());
クリックごとに1つの新しいファイルコントロールアップロードがコンテナに生成されると予想しますが、常に1を取得します。複数のファイルアップロードコントロールを作成するには、何をする必要がありますか?
これは簡単だと思いましたが、リンクボタンがあり、クリックイベントでこれを行います。
myContainer.Controls.Add( new FileUpload());
クリックごとに1つの新しいファイルコントロールアップロードがコンテナに生成されると予想しますが、常に1を取得します。複数のファイルアップロードコントロールを作成するには、何をする必要がありますか?
コントロールは動的に追加されたため、ポストバック後は存続しません。これは、ファイルのアップロード (またはその他の動的に追加されたコントロール) を preinit イベントに再度追加して、その値を設定し、後でページのライフ サイクルで使用できるようにする必要があることを意味します。
複数のファイルをアップロードできるようにしようとしているようです。ファイルのアップロードを jQuery で追加し、Request.Files プロパティを使用してバックエンドで取得することができます。
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」値を使用してポストバックの原因を把握し、不要なアップロード コントロールを取得しないようにします。
うまくいけば、これが役立つことを願っています。
ハンレット