我認爲這是簡單的,但我有一個鏈接按鈕,我這樣做的單擊事件:如何動態和逐步添加控件容器
myContainer.Controls.Add(new FileUpload());
我想到1個新的文件控制上傳在每個點擊的容器中產生,但是,我總是得到1.我需要做什麼才能擁有多個文件上傳控件?
我認爲這是簡單的,但我有一個鏈接按鈕,我這樣做的單擊事件:如何動態和逐步添加控件容器
myContainer.Controls.Add(new FileUpload());
我想到1個新的文件控制上傳在每個點擊的容器中產生,但是,我總是得到1.我需要做什麼才能擁有多個文件上傳控件?
由於控件是動態添加的,因此無法在回發期間存活。這意味着您必須在preinit事件中再次添加文件上傳(或任何其他動態添加的控件),以便能夠填充其值並在稍後的頁面生命週期中使用它。
聽起來像你試圖能夠上傳多個文件。您可能想要使用jQuery添加文件上傳,並使用Request.Files屬性將它們置於後端。
我同意Becuzz的回答。試試這個,有更好的方法來做到這一點,但是這可能會有所幫助:
添加到您的網頁
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」值知道是什麼引起的回傳,這樣你就不會收到不需要上傳控件。
祝你好運,希望這會有所幫助。
Hanlet
感謝您的源代碼。我不認爲這段代碼在回發後會保留到每個FileUpload控件的文件路徑,是嗎? – Haoest
好問題。事實上它會。我只是在示例代碼中添加了另一個按鈕,它完美地工作。祝你好運! –
嗯,如果我點擊瀏覽並選擇一個文件,然後點擊添加一個新的文件上傳控制,我爲上一次上傳選擇的文件路徑消失。我錯過了什麼? – Haoest