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

C# 使用ASP.NET C在面板控件中迭代动态FileUpload控件集合#,c#,asp.net,file-upload,panel,dynamic-controls,C#,Asp.net,File Upload,Panel,Dynamic Controls,我正在尝试获取添加到面板的动态生成的FileUpload控件的值: <asp:Panel ID="pFileControls" runat="server"> </asp:Panel> 在我使用此按钮提交表单之前,一切正常: <asp:Button ID="btnImportFile" runat="server" Text="Save" OnClick="btnImportFile_Click" /> 我这样做是因为我在我的网站中使用母版页/内容页设置,

我正在尝试获取添加到面板的动态生成的FileUpload控件的值:

<asp:Panel ID="pFileControls" runat="server">
</asp:Panel>
在我使用此按钮提交表单之前,一切正常:

<asp:Button ID="btnImportFile" runat="server" Text="Save" OnClick="btnImportFile_Click" />
我这样做是因为我在我的网站中使用母版页/内容页设置,并且出于AJAXification的目的,所有事情都发生在UpdatePanel中。请记住,如果我在HTML视图中明确指定FileUpload控件,它将100%正常工作

提交表单时,我尝试如下迭代面板:

foreach (Control ctrl in pFileControls.Controls)
{
    if (ctrl.GetType() != typeof(FileUpload))
    {
        continue;
    }

    //Do the saving of the file here
}

除此之外,面板似乎只返回一个控件:页面的内容占位符,而不返回其他控件。有人对此有什么想法吗?

您要在生命周期的哪一部分添加动态控件

如果要将它们放入页面加载,则可能为时已晚,请尝试将动态控件的生成放入页面初始化中,看看这是否解决了问题

页面生命周期

动态控制 注:

“建议加载动态 控件,而不是在页面初始化期间, 因为我们可能想把我们的 在早期使用适当处理程序的事件 阶段…不分配 动态控件的属性 (viewstate已启用),在页面初始化期间, 它不会被反映出来。”

我希望即使使用更新面板,您也需要注意动态控件的页面加载限制

让我知道这是否有帮助,或者我是否错过了目标

让我们尝试另一种做法(我已经让动态文件上传工作,但这是一个熊,我希望我只是使用这个)

这些可能不会创建元素的“循环”,但您可以根据需要继续加载文档

我特别使用了 效果很好

更新似乎也有一些限制:面板和文件上传,请查看这些网站

(这个表示它在部分更新状态下不工作,但在完全回发状态下工作)


您知道提交是触发整个页面还是仅触发更新:面板吗?(查看此链接:

非常感谢,您给我的第二个链接将其清除。我只需加载Page_load中的控件即可!好吧,也许我有点太匆忙了。因为我每次都在Page_load上重新创建控件,提交时包含的任何值都会丢失。有什么想法吗?@Smith先生,您需要创建e控件。将此部分放入page_init,它们将在每次加载时重新创建,但当加载viewstate时,您的值将重新输入(通过viewstate).by page_load viewstate已加载感谢回复。我尝试将动态生成放在page_Init中,但没有成功。当我到达迭代部分时,它确实找到控件,但它们没有“文件”(即FileUpload.HasFile)@Smith先生,在ajax中使用文件加载器可能是一种尝试性的体验,我会尝试使用asp.net ajax工具包(我已经开始使用文件上传工具)或其他任何免费工具(我链接了一个看起来很不错的工具).至于no文件,我仍然想知道生命周期阶段,以及当您创建控件时,您是否没有添加任何可能覆盖回发数据的属性?
ScriptManager.GetCurrent(this).RegisterPostBackControl(btnImportFile);
foreach (Control ctrl in pFileControls.Controls)
{
    if (ctrl.GetType() != typeof(FileUpload))
    {
        continue;
    }

    //Do the saving of the file here
}