代码之家  ›  专栏  ›  技术社区  ›  Mr. Smith

使用ASP.NET C在Panel控件中迭代动态文件上载控件集合#

  •  3
  • Mr. Smith  · 技术社区  · 15 年前

    <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" />
    

    我是这样注册的(页面加载):

    ScriptManager.GetCurrent(this).RegisterPostBackControl(btnImportFile);
    

    我这样做是因为我在我的网站中使用了MasterPage/ContentPage设置,而且大多数情况下,为了实现AJAXification,所有的事情都发生在UpdatePanel中。请记住,如果我在HTML视图中明确指定了一个FileUpload控件,它可以100%工作。

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

    foreach (Control ctrl in pFileControls.Controls)
    {
        if (ctrl.GetType() != typeof(FileUpload))
        {
            continue;
        }
    
        //Do the saving of the file here
    }
    

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

    1 回复  |  直到 15 年前
        1
  •  1
  •   Harrison    15 年前

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

    如果将它们放到page_load中,可能为时已晚,请尝试将动态控件的生成放到page_in it中,看看是否可以解决问题。

    页面生命周期 http://msdn.microsoft.com/en-us/library/ms178472.aspx

    动态控件 http://geekswithblogs.net/shahed/archive/2008/06/26/123391.aspx

    “建议加载动态 相反,在页面初始化期间, 因为我们可能想 早期具有适当处理程序的事件 舞台。。。不分配 动态控件的属性 不会反映出来。”

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

    让我知道如果这有帮助或如果我错过了标记!

    让我们尝试一个不同的操作过程(我已经将动态文件上传到工作中,但这是一个熊,我希望我只是使用这个) 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

    你知道提交是触发整个页面还是仅仅触发update:面板吗?(看看这个: http://geekswithblogs.net/mmintoff/archive/2009/04/01/fileupload-within-updatepanel.aspx