我正在尝试获取我添加到Panel中的动态生成的FileUpload控件的值:
<asp:Panel ID="pFileControls" runat="server">
</asp:Panel>
我在循环记录集中创建控件:
foreach(DataRow dr in ds.Tables[0].Rows)
{
FileUpload fu = new FileUpload();
fu.ID = dr["SomeID"].ToString();
pFileControls.Controls.Add(fu);
}
一切正常,直到我使用此按钮提交表单:
<asp:Button ID="btnImportFile" runat="server" Text="Save" OnClick="btnImportFile_Click" />
我这样注册(Page_Load):
ScriptManager.GetCurrent(this).RegisterPostBackControl(btnImportFile);
我这样做是因为我在我的网站中使用了MasterPage / ContentPage设置,并且大部分内容都发生在用于AJAX化目的的UpdatePanel中。请记住,如果我明确指出HTML视图中的FileUpload控件,它可以100%工作。
提交表单后,我尝试按照以下方式迭代Panel:
foreach (Control ctrl in pFileControls.Controls)
{
if (ctrl.GetType() != typeof(FileUpload))
{
continue;
}
//Do the saving of the file here
}
除此之外,Panel似乎只返回一个控件:页面的内容占位符而不是其他内容。有没有人对此有一些想法?
答案 0 :(得分:1)
您添加动态控件的生命周期的哪个部分?
如果你将它们放在page_load中,可能为时已晚,请尝试将动态控件的生成放入page_init,看看是否能解决问题。
页面生命周期 http://msdn.microsoft.com/en-us/library/ms178472.aspx
动态控制 http://geekswithblogs.net/shahed/archive/2008/06/26/123391.aspx 注意:
“建议加载动态 在Page_Init期间控制, 因为我们可能想要联系我们 具有适当处理程序的事件 阶段。 ......不要分配 动态控件的属性 (viewstate enabled),在Page_Init期间, 它不会被反映出来。 “
我希望即使使用更新面板,您也需要注意动态控件的page_load限制。
让我知道这是否有帮助,或者我是否错过了标记!
让我们尝试不同的行动方案(我已经让动态文件上传工作,但它是一只熊,我希望我只是使用它) http://www.asp.net/ajaxlibrary/act_AsyncFileUpload.ashx
或 http://en.fileuploadajax.subgurim.net/
这些可能无法创建元素的“循环”,但您可以根据需要继续加载文档。
我特意使用过 http://www.asp.net/ajaxlibrary/act_AsyncFileUpload.ashx 效果很好。
更新似乎也有一些限制:面板和文件上传,请查看这些网站。
(这个说它在部分更新状态下不起作用,但在完全回发中有效) http://forums.asp.net/p/1105208/1689084.aspx
您知道提交是触发整页还是仅更新:面板? (看看这个:http://geekswithblogs.net/mmintoff/archive/2009/04/01/fileupload-within-updatepanel.aspx