使用ASP.NET C#在Panel Control中迭代动态FileUpload控件集合

时间:2010-10-15 13:55:46

标签: c# asp.net file-upload panel dynamic-controls

我正在尝试获取我添加到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似乎只返回一个控件:页面的内容占位符而不是其他内容。有没有人对此有一些想法?

1 个答案:

答案 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