我认为这是直截了当的,但我有一个链接按钮,我在点击事件中这样做:
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”值来了解导致回发的原因,这样您就不会得到不需要的上传控件。
祝你好运,希望这会有所帮助。
汉莱特